home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2002 #11 / Amiga Plus CD - 2002 - No. 11.iso / Sound / AmySequencer / AmySequencer2.text < prev    next >
Text File  |  2002-10-27  |  249KB  |  6,445 lines

  1. ;-> AmySequencer2 by Stefano Maria Regattin
  2. ;d> 19 gennaio 2002 da AmySequencer
  3. ;m> 20,21,22,23,24,26,30,31 gennaio 2002
  4. ;m> 1,2,3,4,5,6,7,9,10,11,13,15,16,17,18,19,20,22,23,24,27,28 febbraio 2002
  5. ;m> 1,2,3,4,5,6,7,8,10,11,13,14,15,16,18,19,20,21,22,23,24,25,26,27,28,31 marzo 2002
  6. ;m> 1,2,4,5,6,8,9,10,11,13,14,19,20,21,22,24,25,28,29,30 aprile 2002
  7. ;m> 4,5,6,8,9,10,11,12,13,14,15,17,18 maggio 2002
  8. ;m> 12,14,15,16,17,20,22,23,28,30 giugno 2002
  9. ;m> 1,3,4,5,9,10,13,15,16 luglio 2002
  10. ;m> 10,13,14,23 agosto 2002
  11. ;m> 2,5,22 settembre 2002
  12. ;m> 8,9,12,16,17,18,20,21,22 ottobre 2002
  13. ;-----------------------------------------
  14.  
  15. ;-----------------------
  16. ;versione del programma
  17. ;program version
  18. ;----------------
  19. Versione$="$VER: AmySequencer 0.13 (22.10.2002)"
  20.  
  21. ;------------------------------------------
  22. ;dati per i colori originali dello schermo
  23. ;original screen colours data
  24. ;-----------------------------
  25. Data.b 0,0,0
  26. Data.b 4,4,4
  27. Data.b 8,8,8
  28. Data.b 12,12,12
  29. Data.b 12,0,0
  30. Data.b 12,6,0
  31. Data.b 12,12,0
  32. Data.b 6,12,0
  33. Data.b 0,12,0
  34. Data.b 0,12,6
  35. Data.b 0,12,12
  36. Data.b 0,6,12
  37. Data.b 0,0,12
  38. Data.b 6,0,12
  39. Data.b 12,0,12
  40. Data.b 12,0,6
  41.  
  42. ;------------------------------------------------------------------------
  43. ;il seguente comando indica dove si trovano sul vostro computer i codici
  44. ; sorgenti di Blitz2 da includere in questo programma
  45. ;the following command states the place on your computer where are the Blitz2
  46. ; source codes to be included into this program
  47. ;-----------------------------------------------
  48. INCDIR "Lavoro:Linguaggi/Blitz/"
  49.  
  50. ;-------------------------------------------------------------------------
  51. ;questo comando inserisce una sola volta in questo punto del programma il
  52. ; codice sorgente specificato
  53. ;this command inserts one unique time in this point of the program the
  54. ; specified source code
  55. ;-----------------------
  56. XINCLUDE "MIDIConstants.bb2"
  57.  
  58. ;------------------------------------------------------------------------------
  59. ;le seguenti costanti servono per ricavare il periodo di un canale audio AMIGA
  60. ; dalla frequenza di campionamento; ce ne e' una per gli AMIGA PAL e una per
  61. ; quelli NTSC
  62. ;the following constants are used to obtain an AMIGA audio channel period from the
  63. ; sampling frequency; there is one for PAL AMIGAs and one for NTSC AMIGAs
  64. ;-------------------------------------------------------------------------
  65.  
  66. ;PAL timing
  67. #TemporizzazionePAL=3546895
  68.  
  69. ;NTSC timing
  70. #TemporizzazioneNTSC=3579545
  71.  
  72. ;-------------------------------------------------------------------------
  73. ;questa costante indica il numero di riferimento della fonte di caratteri
  74. ; Topaz8
  75. ;this constant states the characters font Topaz8 referring number
  76. ;-----------------------------------------------------------------
  77. #FonteDiCaratteriTopaz8=0
  78.  
  79. ;-------------------------------------------------------------------------
  80. ;questa variabile imposta il periodo minimo per i canali audio; il limite
  81. ; per i vecchi AMIGA e' 123, ma io ho scelto un periodo minimo di 125, che
  82. ; corrisponde ad un La nella nona ottava
  83. ;this variable sets the audio channels minimum period; on the oldest AMIGA the
  84. ; lowerst usable period is 123, but I have choosen minimum period of 125, that is
  85. ; the A note in the ninth octave
  86. ;--------------------------------
  87. #PeriodoMinimo=125
  88.  
  89. ;---------------------------------------------------------------------------
  90. ;questa costante indica il numero di riferimento della tavolozza dei colori
  91. ; disponibili
  92. ;this constant states the colour palette referring number
  93. ;---------------------------------------------------------
  94. #TavolozzaDeiColori=0
  95.  
  96. ;--------------------------------------------------
  97. ;le seguenti costanti indicano il tipo di finestra
  98. ;the following constants state the window's kind
  99. ;------------------------------------------------
  100.  
  101. ;window sizing gadget
  102. #GadgetRidimensionaFinestra=1
  103.  
  104. ;draggable window
  105. #FinestraMovibile=2
  106.  
  107. ;window depth gadget
  108. #GadgetNascondiFinestra=4
  109.  
  110. ;close gadget
  111. #GadgetChiudiFinestra=8
  112.  
  113. ;sizing window right border (you must set gimme-zero-zero to use it)
  114. #BordoDestraFinestraRidimensionabile=16
  115.  
  116. ;sizing window bottom border (you must set gimme-zero-zero to use it)
  117. #BordoBassoFinestraRidimensionabile=32
  118.  
  119. ;backdrop window
  120. #FinestraDiSfondo=256
  121.  
  122. ;gimme-zero-zero window
  123. #FinestraConMemoriaSfondo=1024
  124.  
  125. ;borderless window
  126. #FinestraSenzaBordi=2048
  127.  
  128. ;window active
  129. #FinestraAttivata=4096
  130.  
  131. ;------------------------------------------------
  132. ;le seguenti costanti indicano il tipo di gadget
  133. ;the following constants state the gadgets' kind
  134. ;------------------------------------------------
  135.  
  136. ;invert
  137. #InvertiGadget=1
  138.  
  139. ;related to window's right side
  140. #PosizioneRelativaAllaDestraDellaFinestra=2
  141.  
  142. ;related to window'w bottom side
  143. #PosizioneRelativaAlBassoDellaFinestra=4
  144.  
  145. ;size as window's inner width
  146. #ComeLarghezzaInternaFinestra=8
  147.  
  148. ;size as window's inner height
  149. #ComeAltezzaInternaFinestra=16
  150.  
  151. ;box select
  152. #ScatolaDaSelezionare=32
  153.  
  154. ;horiziontal movement
  155. #MovimentoOrizzontale=64
  156.  
  157. ;vertical movement
  158. #MovimentoVerticale=128
  159.  
  160. ;no border
  161. #NessunBordo=256
  162.  
  163. ;exclude each other
  164. #SiEscludonoLUnLAltro=512
  165.  
  166. ;attach to window's right side
  167. #AttaccaADestraDellaFinestra=1024
  168.  
  169. ;attach to window's left side
  170. #AttaccaASinistraDellaFinestra=2048
  171.  
  172. ;attach to window's top
  173. #AttaccaAllaFinestraInAlto=4096
  174.  
  175. ;attach to window's bottom
  176. #AttaccaAllaFinestraInBasso=8192
  177.  
  178. ;gimme-zero-zero border gadget
  179. #GadgetConMemoriaBordo=16384
  180.  
  181. ;--------------------------------------------------------
  182. ;le seguenti costanti indicano gli eventi delle finestre
  183. ;the following constants state window events
  184. ;--------------------------------------------
  185.  
  186. ;you have pressed a mouse button
  187. #HaiPremutoUnTastoDelTopo=8
  188.  
  189. ;you have moved the mouse
  190. #HaiMossoIlTopo=16
  191.  
  192. ;you have pressed a gadget
  193. #HaiPremutoUnGadget=32
  194.  
  195. ;you have released a gadget
  196. #HaiRilasciatoUnGadget=64
  197.  
  198. ;you have activated a menu
  199. #HaiAttivatoIlMenu=256
  200.  
  201. ;you have closed the window
  202. #HaiChiusoLaFinestra=512
  203.  
  204. ;you have pressed a key
  205. #HaiPremutoUnTasto=1024
  206.  
  207. ;--------------------------------------------------------
  208. ;le seguenti costanti indicano i tasti cliccati del topo
  209. ;the following constants state the clicked mouse buttons
  210. ;--------------------------------------------------------
  211.  
  212. ;left mouse button pressed
  213. #TastoSinistroDelTopoPremuto=1
  214.  
  215. ;right mouse button pressed
  216. #TastoDestroDelTopoPremuto=2
  217.  
  218. ;left mouse button released
  219. #TastoSinistroDelTopoRilasciato=5
  220.  
  221. ;right mouse button released
  222. #TastoDestroDelTopoRilasciato=6
  223.  
  224. ;-----------------------------------------------------------------------------
  225. ;le seguenti costanti indicano il valore ascii del tasti Backspace, Esc e dei
  226. ; tasti freccia
  227. ;the following constants state the ascii value for the Backspace, Esc and
  228. ; arrow keys
  229. ;------------
  230. #Backspace=8
  231. #Escape=27
  232. #CursorUp=28
  233. #CursorDown=29
  234. #CursorRight=30
  235. #CursorLeft=31
  236.  
  237. ;Backspace key
  238. TastoBackspace$=Chr$(#Backspace)
  239.  
  240. ;Esc key
  241. TastoEsc$=Chr$(#Escape)
  242.  
  243. ;Cursor up key
  244. TastoCursoreSu$=Chr$(#CursorUp)
  245.  
  246. ;Cursor down key
  247. TastoCursoreGiu$=Chr$(#CursorDown)
  248.  
  249. ;Cursor right key
  250. TastoCursoreDestra$=Chr$(#CursorRight)
  251.  
  252. ;Cursor left key
  253. TastoCursoreSinistra$=Chr$(#CursorLeft)
  254.  
  255. ;-----------------------------------------------------------
  256. ;le seguenti costanti indicano i bottoni del joypad premuti
  257. ;the following constants state the joypad pressed buttons
  258. ;---------------------------------------------------------
  259. #_PlayB=1
  260. #_ReverseB=2
  261. #_ForwardB=4
  262. #_GreenB=8
  263. #_YellowB=16
  264. #_RedB=32
  265. #_BlueB=64
  266.  
  267. ;-------------------------------------------------------------------------
  268. ;le seguenti costanti indicano la direzione scelta con il joystick/joypad
  269. ;the following constants state the choosen direction by joystick/joypad
  270. ;-----------------------------------------------------------------------
  271. #JoyMovedUp=0
  272. #JoyMovedRight=2
  273. #JoyMovedDown=4
  274. #JoyMovedLeft=6
  275. #JoyNotMoved=8
  276.  
  277. ;screen
  278. #Schermo=0
  279.  
  280. ;main window
  281. #FinestraPrincipale=0
  282.  
  283. ;main window's gadget list
  284. #ListaGadgetPrincipale=0
  285.  
  286. ;main window's menu list
  287. #ListaMenuPrincipale=0
  288.  
  289. ;sounds editor window
  290. #FinestraEditoreSuoni=1
  291.  
  292. ;sounds editor window's gadget list
  293. #ListaGadgetEditoreSuoni=1
  294.  
  295. ;sound editor window's menu list
  296. #ListaMenuEditoreSuoni=1
  297.  
  298. ;notes editor window
  299. #FinestraEditoreSequenza=2
  300.  
  301. ;notes editor window's gadget list
  302. #ListaGadgetEditoreSequenza=2
  303.  
  304. ;notes editor window's menu list
  305. #ListaMenuEditoreSequenza=2
  306.  
  307. ;note editor window's zonetable
  308. #TabellaZoneEditoreSequenza=0
  309.  
  310. ;window to change basic note length
  311. #FinestraCambioEventoBase=3
  312.  
  313. ;basic note length change window's gadget list
  314. #ListaGadgetCambioEventoBase=3
  315.  
  316. ;slider editore suoni, valore utile qualsiasi maggiore di zero
  317. ;sounds editor's slider, useful value any greater than zero
  318. #SliderEditoreSuoni=1
  319.  
  320. ;basic note change window's zonetable
  321. #TabellaZoneCambioEventoBase=1
  322.  
  323. ;background pic's bitmap
  324. #BitmapImmagineDiSfondo=0
  325.  
  326. ;-------------------------------------------------------------------------
  327. ;queste costanti indicano i cambiamenti che possono essere applicati agli
  328. ; eventi musicali
  329. ;these constants states different changes that can be applied to musical
  330. : events
  331. ;--------
  332.  
  333. ;select an event
  334. #SelezionaUnEvento=0
  335.  
  336. ;change the channel of the selected events
  337. #CambiaIlCanaleDegliEventiMusicaliSelezionati=1
  338.  
  339. ;increase by one the selected events
  340. #AlzaDiUnoGliEventiMusicaliSelezionati=2
  341.  
  342. ;decrease by one the selected events
  343. #AbbassaDiUnoGliEventiMusicaliSelezionati=3
  344.  
  345. ;move forward the selected events
  346. #SpostaAvantiNelTempoGliEventiMusicaliSelezionati=4
  347.  
  348. ;move backward the selected events
  349. #SpostaIndietroNelTempoGliEventiMusicaliSelezionati=5
  350.  
  351. ;delete the selected events
  352. #EliminaGliEventiMusicaliSelezionati=6
  353.  
  354. ;select all the events
  355. #SelezionaTuttiGliEventiMusicali=7
  356.  
  357. ;deselect all the events
  358. #DeselezionaTuttiGliEventiMusicali=8
  359.  
  360. ;toggle selection of all events
  361. #InvertiLaSelezioneDiTuttiGliEventiMusicali=9
  362.  
  363. ;select same kind's events with the same channel
  364. #SelezionaGliEventiMusicaliUguali=10
  365.  
  366. ;add 10 to the to the event value of the selected events that aren't notes
  367. #AggiungiDieciAgliEventiMusicaliSelezionati=11
  368.  
  369. ;sub 10 to the event value of the selected events that aren't notes
  370. #SottraiDieciAgliEventiMusicaliSelezionati=12
  371.  
  372. ;put up of one octave the selected notes
  373. #AlzaDiUnOttavaLeNoteSelezionate=13
  374.  
  375. ;put down of one octave the selected notes
  376. #AbbassaDiUnOttavaLeNoteSelezionate=14
  377.  
  378. ;change the value of the selected events, that is velocity for notes
  379. #CambiaIlValoreDegliEventiMusicaliSelezionati=15
  380.  
  381. ;increase the selected notes length
  382. #AllungaLaDurataDelleNoteSelezionate=16
  383.  
  384. ;decrease the selected notes length
  385. #RiduciLaDurataDelleNoteSelezionate=17
  386.  
  387. ;add a beat to selected time signature events
  388. #AggiungiUnBattitoAlTempoSelezionato=18
  389.  
  390. ;sub a beat to selected time signature events
  391. #TogliUnBattitoAlTempoSelezionato=19
  392.  
  393. ;add a measure to selected time signature events
  394. #AggiungiUnaMisuraAlTempoSelezionato=20
  395.  
  396. ;sub a measure to selected time signature events
  397. #TogliUnaMisuraAlTempoSelezionato=21
  398.  
  399. ;------------------------------------------------------------------------------
  400. ;le seguenti costanti indicano il modo di disegno delle sequenze  visualizzate
  401. ;the following constants state the displayed sequences drawing mode
  402. ;-------------------------------------------------------------------
  403.  
  404. ;unselected sequence
  405. #SequenzaNonSelezionata=0
  406.  
  407. ;selected sequence
  408. #SequenzaSelezionata=1
  409.  
  410. ;highlighted sequence
  411. #SequenzaEvidenziata=2
  412.  
  413. ;----------------------------------------------------------------------------
  414. ;le seguenti costanti indicano lo stato che un evento musicale puo' assumere
  415. ;the following constants state the status that a musical event can be
  416. ;---------------------------------------------------------------------
  417.  
  418. ;unselected event
  419. #EventoMusicaleNonSelezionato=0
  420.  
  421. ;selected event
  422. #EventoMusicaleSelezionato=1
  423.  
  424. ;cutted event
  425. #EventoMusicaleTagliato=2
  426.  
  427. ;copied event
  428. #EventoMusicaleCopiato=4
  429.  
  430. ;played event
  431. #EventoMusicaleSuonato=8
  432.  
  433. ;ended event
  434. #EventoMusicaleTerminato=16
  435.  
  436. ;----------------------------------------------
  437. ;queste costanti indicano come suonare le note
  438. ;these constants state how to play notes
  439. ;----------------------------------------
  440.  
  441. ;execute events from the main window
  442. #EseguiGliEventiMusicaliDallaFinestraPrincipale=0
  443.  
  444. ;execute events from the sequence editor
  445. #EseguiGliEventiMusicaliDallEditoreSequenza=1
  446.  
  447. ;---------------------------------------------------------------------------
  448. ;le seguenti costanti sono usate dal comando WJam per la selezione del modo
  449. ; grafico
  450. ;the following constants are used by WJam command for the graphic mode
  451. ; selection
  452. ;-----------
  453.  
  454. ;one colour with transparent background
  455. #UnColoreConSfondoTrasparente=0
  456.  
  457. ;two colours with full background
  458. #DueColoriConSfondoPieno=1
  459.  
  460. ;second time same colour
  461. #SecondaVoltaStessoColore=2
  462.  
  463. ;--------------------------------------------------------------
  464. ;le seguenti costanti indicano il tempo base che e' 4/4, cioe'
  465. ; #BattitiDiBase/#MisureDiBase
  466. ;the following constants states the basic time that is 4/4, that is
  467. ; #BattitiDiBase/#MisureDiBase
  468. ;------------------------------
  469.  
  470. ;basic beats
  471. #BattitiDiBase=4
  472.  
  473. ;basic measures
  474. #MisureDiBase=4
  475.  
  476. ;tracks maximum
  477. #MassimoTracce=1024
  478.  
  479. ;sequences maximum
  480. #MassimoSequenze=32768
  481.  
  482. ;          font height, notes invisible area,   selected channel, note increment y, basic event,musical event moved by mouse
  483. DEFTYPE .b AltezzaFonte,AreaInvisibileDelleNote,CanaleSelezionato,IncrementoYNota,  EventoBase, EventoMusicaleSpostatoConIlTopo
  484.  
  485. ;          speech enabled, clicked mouse key,   visible tracks,AMIGA voice off,visible area start y
  486. DEFTYPE .b ParlatoAttivato,TastoDelTopoCliccato,TracceVisibili,VoceSpenta,     YInizioAreaVisibile
  487.  
  488. ;          editor window inner height,           editor window inner width
  489. DEFTYPE .w AltezzaInternaFinestraEditoreSequenza,LarghezzaInternaFinestraEditoreSequenza
  490.  
  491. ;          main window inner height,        main window inner width
  492. DEFTYPE .w AltezzaInternaFinestraPrincipale,LarghezzaInternaFinestraPrincipale
  493.  
  494. ;          screen height, values visible area,  Active channels,selected musical event,   screen height,   slider width
  495. DEFTYPE .w AltezzaSchermo,AreaVisibileDeiValori,CanaliAttivati, EventoMusicaleSelezionato,LarghezzaSchermo,XLunSlider
  496.  
  497. ;          bars per mins background x,tempo background x,mouse x,slider height,tempo background y,bars per mins background y
  498. DEFTYPE .w XPosSfondoBattutePerMinuto,XPosSfondoTempo,   XTopo,  YLunSlider,   YPosSfondoTempo,   YPosSfondoBattutePerMinuto
  499.  
  500. ;          mouse y
  501. DEFTYPE .w YTopo
  502.  
  503. ;          time invisible area,   sequence duration,events,selected events,  MIDI enabled,Insertion point,   sequence
  504. DEFTYPE .l AreaInvisibileDelTempo,DurataSequenza,   Eventi,EventiSelezionati,MIDIAttivato,PuntoDiInserimento,Sequenza
  505.  
  506. ;          selected sequence,  visible area start x
  507. DEFTYPE .l SequenzaSelezionata,XInizioAreaVisibile
  508.  
  509. ;----------------------------------------------------------
  510. ;questa variabile riporta la parte non visibile del motivo
  511. ;this variable reports the non visible motive area
  512. ;--------------------------------------------------
  513. AreaInvisibileDelMotivo.l=0
  514.  
  515. ;-----------------------------------------------------------------------------
  516. ;questa variabile indica la velocita' di esecuzione delle note, indicata come
  517. ; battute al minuto
  518. ;this variable states the notes execution velocity, stated as bars per minute
  519. ;-----------------------------------------------------------------------------
  520. BattutePerMinuto.w=120
  521.  
  522. ;-----------------------------------------------------
  523. ;questa variabile indica i battiti correnti del tempo
  524. ;this variable states the time's current beats
  525. ;----------------------------------------------
  526. Battiti.b=#BattitiDiBase
  527.  
  528. ;----------------------------------------------------------------------------
  529. ;la seguente variabile permette la selezione delle due diverse tavolozze dei
  530. ; colori; se vera (true), i colori saranno quelli originali, se falsa (false)
  531. ; saranno quelli dell'immagine di sfondo a colori
  532. ;the following variable permits the selection of the two different colour
  533. ; palettes; if true the colours will be as original, if false they will be
  534. ; the ones from the coloured pic
  535. ;--------------------------------
  536. ColoriOriginali.b=False
  537.  
  538. ;----------------------------------------------------------------------------
  539. ;questa costante indica il valore per cui bisogna moltiplicare o dividere la
  540. ; frequenza della nota per ricavare rispettivamente la nota successiva o la
  541. ; nota precedente e corrisponde a 2^(1/12), cioe' la radice dodicesima di 2
  542. ;this constant states the value witch it must moltiply or divide the note
  543. ; frequency to obtain respectively the following note or the previous note and
  544. ; corresponds to 2^(1/12), that is the twelfth root of 2
  545. ;--------------------------------------------------------
  546. DistanzaSemitono.f=1.05946309
  547.  
  548. ;------------------------------------------------------------------------------
  549. ;questa variabile, diventando vera (true), vi permette di uscire dal programma
  550. ;this variable, becaming True, let you exit from the program
  551. ;------------------------------------------------------------
  552. EsciDalProgramma.b=False
  553.  
  554. ;------------------------------------------
  555. ;questa variabile indica la fine del brano
  556. ;this variable states song end
  557. ;------------------------------
  558. FineMotivo.l=0
  559.  
  560. ;------------------------------------------------------------------
  561. ;questa variabile indica se e' stata aperta la finestra principale
  562. ;this flag states if the main window is opened
  563. ;----------------------------------------------
  564. FinestraPrincipaleAperta.b=False
  565.  
  566. ;------------------------------------------------------------------------------
  567. ;Questa variabile indica la larghezza di base delle note; puo' essere cambiata
  568. ; secondo i bisogni del momento
  569. ;This variable states the basic notes width; it can be changed depending of
  570. ; the needs of the moment
  571. ;-------------------------
  572. LarghezzaEventoBase.w=192
  573.  
  574. ;-----------------------------------------------------
  575. ;questa variabile indica le misure correnti del tempo
  576. ;this variable states the time's current measures
  577. ;-------------------------------------------------
  578. Misure.b=#MisureDiBase
  579.  
  580. ;------------------------------------------------------------------------
  581. ;questa variabile indica se gli eventi musicali dello stesso tipo devono
  582. ; essere mostrati da soli nell'editore sequenza
  583. ;this variable states if the same kind musical events must be shown alone in
  584. ; the sequence editor
  585. ;---------------------
  586. MostraEventiMusicaliDelloStessoTipoDaSoli.b=False
  587.  
  588. ;----------------------------------------------------------------------------
  589. ;questa variabile indica se deve essere mostrato il nuovo valore dell'evento
  590. ; selezionato mosso con il mouse
  591. ;this variable states if the new value of the selected event dragged by mouse
  592. ; must be showed or not
  593. ;-----------------------
  594. MostraNuovoValore.b=False
  595.  
  596. ;---------------------------------------------------------------------------
  597. ;questa variabile sara' maggiore di zero se una nota non e' stata terminata
  598. ;this variable will be greater than zero if one or more notes have not been
  599. ; terminated
  600. ;------------
  601. NoteSuonate.l=0
  602.  
  603. ;--------------------------------------------------------------------
  604. ;questa variabile indica l'ottava visualizzata nell'editore sequenza
  605. ;this variable states the visualized octave in the sequence editor
  606. ;------------------------------------------------------------------
  607. OttavaSelezionata.b=#_MiddleC/12
  608.  
  609. ;-------------------------------------------
  610. ;questa variabile indica la sequenza in uso
  611. ;this variable states the sequence in use
  612. ;-----------------------------------------
  613. Sequenza.l=0
  614.  
  615. ;--------------------------------------------------------------------------
  616. ;questa variabile indica la scala di visualizzazione delgi eventi musicali
  617. ; dell'editore sequenza
  618. ;this variable states the musical events visualization scale of the sequence
  619. ; editor
  620. ;--------
  621. ScalaEventiMusicali.w=1
  622.  
  623. ;--------------------------------------------------------------------------
  624. ;questa variabile indica la sequenza selezionata; se contiene zero nessuna
  625. ; sequenza e' selezionata, altrimenti contiene il numero positivo che
  626. ; identifica la sequenza
  627. ;this variable states the selected sequence; if retains zero no sequence is
  628. ; selected, otherwise retain the positive number that identifies the sequence
  629. ;-----------------------------------------------------------------------------
  630. SequenzaSelezionata=0
  631.  
  632. ;-----------------------------------------------------------------------------
  633. ;questa variabile indica se la lista degli ultimi 5 progetti e' stata scritta
  634. ;this flag states if the last 5 loaded projects list has been written
  635. ;---------------------------------------------------------------------
  636. StoriaDeiProgettiAperti.b=False
  637.  
  638. ;------------------------------------------------------------------------------
  639. ;La nota base, il quarto, corrisponde a 192 tic; questa costante indica quanti
  640. ; tic passano in un 50mo di secondo per un tempo di 120 battute per minuto
  641. ;The basic note, the quarter, corresponds to 192 ticks; this constant signs
  642. ; how many ticks takes passes in a 50th of a second for a time of 120 measures
  643. ; per minutes
  644. ;-------------
  645. TicPerCinquantesimoDiSecondo.f=30.72
  646.  
  647. ;--------------------------------------------------------------------------
  648. ;la seguente variabile stringa indica il tipo di evento musicale corrente;
  649. ; all'inizio e' impostata sull'evento nota
  650. ;the following string variable states the current musical event; at the
  651. ; beginning is set on the note event
  652. ;------------------------------------
  653. TipoDiEventoBase$="Note"
  654.  
  655. ;------------------------------------------------------------------------------
  656. ;questa variabile indica per le note la velocita' di base e per i controlli il
  657. ; valore di base; valore utile da zero a 127
  658. ;this variable states for the notes the basic velocity and for the controls
  659. ; the basic value; useful value from zero to 127
  660. ;------------------------------------------------
  661. ValoreEventoBase.b=64
  662.  
  663. ;-----------------------------------------------------------------------
  664. ;questa variabile indica la posizione della voce Quit del menu' Project
  665. ;this variable marks the position of voice Quit in the Project menu
  666. ;-------------------------------------------------------------------
  667. VoceMenuEsci.b=4
  668.  
  669. ;-------------------------------------------------------------------------
  670. ;questa variabile indica la voce dell'AMIGA che non e' attiva; ogni "uno"
  671. ; corridponde ad una voce di Amiga
  672. ;this variable states the Amiga voice that is not active; each "one" is
  673. ; related to an AMIGA voice
  674. ;---------------------------
  675. VoceSpenta=%1111
  676.  
  677. ;---------------------------------------------------------------------------
  678. ;questa variabile indica la posizione d'inizio per la visualizzazione delle
  679. ; tracce
  680. ;this variables states the start position for the tracks displaying
  681. ;-------------------------------------------------------------------
  682. XTracceVisibili.l=0
  683.  
  684. ;------------------------------------------------------------
  685. ;questa variabile memorizza la prima traccia da visualizzare
  686. ;this variable stores the first track to be displayed
  687. ;-----------------------------------------------------
  688. YTracceVisibili.w=0
  689.  
  690. ;----------------------------------------------------------------------
  691. ;queste cinque variabili indicizzate conterranno i nomi degli ultimi 5
  692. ; progetti caricati
  693. ;this five indexed variables will keep names of last 5 projects loaded
  694. ;----------------------------------------------------------------------
  695. Dim ProgettoAperto$(4)
  696.  
  697. ;-----------------------------------------------------------------------------
  698. ;questa struttura di variabili e' una tabella di riferimento per il periodo e
  699. ; la frequenza associati ad ognuna delle 128 note possibili
  700. ;this variables structure is a refferring table for the periode and frequency
  701. ; paired to every one of the 128 given notes
  702. ;--------------------------------------------
  703. NEWTYPE .PeriFreq
  704.  
  705. ;--------
  706. ;periode
  707. ;--------
  708.  Periodo.l
  709.  
  710. ;----------
  711. ;frequency
  712. ;----------
  713.  Frequenza.f
  714. End NEWTYPE
  715. Dim PeriFreq.PeriFreq(127)
  716.  
  717. ;--------------------------------------------------------------------------
  718. ;la seguente struttura di variabili serve per identificare il tipo di note
  719. ;the following variables structure is used to states the notes kind
  720. ;-------------------------------------------------------------------
  721. NEWTYPE .TipoDiNota
  722.  
  723. ;note italian name
  724.  NomeItaliano$
  725.  
  726. ;note english name
  727.  NomeInglese$
  728.  
  729. ;diesis flag
  730.  Diesis.b
  731.  
  732. ;note octave
  733.  Ottava.b
  734. End NEWTYPE
  735. Dim TipoDiNota.TipoDiNota(127)
  736.  
  737. ;----------------------------------------------------------------------------
  738. ;la seguente struttura di variabili e' per la gestione dei suoni per l'Amiga
  739. ;the following variables structure is for Amiga sounds management
  740. ;-----------------------------------------------------------------
  741. NEWTYPE .Suono
  742.  
  743. ;---------------------------------------------------
  744. ;questa variabile indica il nome del suono caricato
  745. ;this variable states the name of the loaded sound
  746. ;--------------------------------------------------
  747.  Nome$
  748.  
  749. ;----------------------------------------------------------------------------
  750. ;questa variabile indica il canale associato al suono caricato; valore utile
  751. ; da 1 a 16, o zero se nessun canale e' associato al suono
  752. ;this variable states the channel linked to the loaded sound; useful value
  753. ; from 1 to 16, or zero if no channel is assigned to the sound
  754. ;--------------------------------------------------------------
  755.  Canale.b
  756.  
  757. End NEWTYPE
  758. Dim Suono.Suono(31)
  759.  
  760. NEWTYPE .Sequenza
  761.  
  762. ;--------------------------------------------------
  763. ;questa variabile memorizza il nome della sequenza
  764. ;this variable stores the sequence name
  765. ;---------------------------------------
  766. Nome$
  767.  
  768. ;----------------------------------------------------------
  769. ;questa variabile indica l'inizio temporale della sequenza
  770. ;this variable states the sequence time start
  771. ;---------------------------------------------
  772. Inizio.l
  773.  
  774. ;-----------------------------------------------------------
  775. ;questa variabile indica la durata temporale della sequenza
  776. ;this variable states the sequence time duration
  777. ;------------------------------------------------
  778. Durata.l
  779.  
  780. ;--------------------------------------------------------------------
  781. ;questa variabile indica la traccia di appartenenenza della sequenza
  782. ;this variable states the track that the sequence is belonging to
  783. ;-----------------------------------------------------------------
  784. Traccia.w
  785.  
  786. ;------------------------------------------------------------------
  787. ;questa variabile indica gli eventi musicali totali della sequenza
  788. ;this variable states the sequence's total musical events
  789. ;---------------------------------------------------------
  790. EventiMusicali.l
  791.  
  792. ;-----------------------------------------------------------------------
  793. ;questa variabile indica gli eventi musicali selezionati della sequenza
  794. ;this variable states the sequence's selected musical events
  795. ;------------------------------------------------------------
  796. EventiMusicaliSelezionati.l
  797.  
  798. End NEWTYPE
  799. Dim List Sequenza.Sequenza(#MassimoSequenze-1)
  800.  
  801. ;------------------------------------------------------------------------
  802. ;queste variabili indicizzate indicano True (Vero) se la traccia esiste,
  803. ; altrimenti indicano False (Falso)
  804. ;these indexed variables (arrays) state True if track exist, otherwise state
  805. ; False
  806. ;-------
  807. Dim Traccia.b(#MassimoTracce-1)
  808.  
  809. ;----------------------------------------------------------------------------
  810. ;la seguente struttura di variabili e' per la gestione degli eventi musicali
  811. ;the following vars structure is for the musical events management
  812. ;------------------------------------------------------------------
  813. NEWTYPE .EventoMusicale
  814.  
  815. ;----------------------------------------------------------------------------
  816. ;questa variabile stringa indica il tipo di evento musicale, che puo' essere
  817. ; una nota od un parametro MIDI
  818. ;This string variable states the musical event kind, that can be a note or a
  819. ; MIDI parameter
  820. ;----------------
  821.  Tipo$
  822.  
  823. ;-----------------------------------------------------------------------
  824. ;se l'evento musicale e' una nota, questa variabile ne indica l'altezza;
  825. ; valore utile da zero a 127
  826. ;if the event is a note, this variable states its height; useful value from
  827. ;zero to 127
  828. ;------------
  829.  Evento.b
  830.  
  831. ;----------------------------------------------------------------------------
  832. ;questa variabile indica la posizione dell'evento musicale nel tempo in tic;
  833. ; valore utile da zero a 2 miliardi e rotti
  834. ;this variable states musical event position in time by ticks; useful value
  835. ;from zero to over 2 billions
  836. ;-----------------------------
  837.  Inizio.l
  838.  
  839. ;------------------------------------------------------------------------------
  840. ;questa varibile indica il canale dell'evento musicale; valore utile da 1 a 16
  841. ;this variable states musical event's channel; useful value from 1 to 16
  842. ;------------------------------------------------------------------------
  843.  Canale.b
  844.  
  845. ;-----------------------------------------------------------------------------
  846. ;questa variabile identifica la sequenza di appartenenza dell'evento musicale
  847. ; valore utile da 1 a 32768
  848. ;this variable states the sequence witch the musical event belong to: useful
  849. ; value from 1 to 32768
  850. ;-----------------------
  851.  Sequenza.l
  852.  
  853. ;------------------------------------------------------------------------------
  854. ;se l'evento musicale e' una nota, questa variabile ne indica in tic la durata
  855. ; nel tempo; valore utile da 0 a 2 miliardi e rotti (192 tic=nota di un quarto)
  856. ;if the event is a note, this variable states its duration in time by ticks;
  857. ;useful value from zero to over 2 billions (192 ticks=a quarter note)
  858. ;---------------------------------------------------------------------
  859.  Durata.l
  860.  
  861. ;--------------------------------------------------------------------------
  862. ;se l'evento musicale e'una nota, questa variabile ne indica l'intensita',
  863. ;cioe' il suo volume; se invece l'evento e' un controllo ne indica il valore
  864. ;if the musical event is a note, this variable states its intensity, that is
  865. ; its volume; if instead is a control it states its value
  866. ;---------------------------------------------------------
  867.  Valore.b
  868.  
  869. ;----------------------------------------------------------------------------
  870. ;questa variabile indica se l'evento musicale e' stato selezionato, tagliato
  871. ; copiato, eseguito o terminato, piu' precisamente:
  872. ; 0=evento non selezionato
  873. ; 1=evento selezionato
  874. ; +2=evento tagliato
  875. ; +4=evento copiato
  876. ; +8=evento eseguito
  877. ; +16=evento terminato
  878. ;this variable states if the musical event has been selected, cutted, copied
  879. ; executed or terminatted, more precisely:
  880. ; 0=unselected event
  881. ; 1=selected event
  882. ; +2=cutted event
  883. ; +4=copied event
  884. ; +8=executed event
  885. ; +16=ended event
  886. ;-----------------
  887.  Stato.b
  888.  
  889. End NEWTYPE
  890.  
  891. DEFTYPE .EventoMusicale NotaSuonata
  892.  
  893. ;-----------------------------------------------------
  894. ;imposta il numero massimo di eventi musicali usabili
  895. ;sets the maximun musical events handling
  896. ;-----------------------------------------
  897. MassimoEventiMusicali.l=Min((FastFree-65536)/SizeOf .EventoMusicale,32768)
  898.  
  899. ;---------------------------------------------------------------------------
  900. ;crea le variabili array lista con la struttura del NEWTYPE .EventoMusicale
  901. ;creates the list array variables with the NEWTYPE .EventoMusicale structure
  902. ;----------------------------------------------------------------------------
  903. Dim List EventoMusicale.EventoMusicale(MassimoEventiMusicali-1)
  904.  
  905. ;-----------------------------------------------------------------
  906. ;questa variabile indica se e' stato attivato un dispositivo MIDI
  907. ;this variable states if a MIDI device has been activated
  908. ;---------------------------------------------------------
  909. MIDIAttivato.l=0
  910.  
  911. ;------------------------------------------------------------------------------
  912. ;questa variabile indica se si entra nell'editore sequenza per la prima volta,
  913. ; per mostrare i requester che riportano i tasti utili
  914. ;this variable states if you enters in the sequence editor for the first time,
  915. ; to show the requesters that show the useful keys
  916. ;--------------------------------------------------
  917. PrimaVoltaNellEditoreSequenza.b=True
  918.  
  919. ;--------------------------------------------------------------------------
  920. ;questa procedura imposta la fonte di caratteri Topaz8 per schermo, menu e
  921. ; requester, ma non per le finestre
  922. ;this procedure sets the characters font Topaz8 for screen, menus and
  923. ; requester, but not for windows
  924. ;--------------------------------
  925. Statement CaricaLaFonteDiCaratteriTopaz8{}
  926. SHARED AltezzaFonte
  927.  AltezzaFonte=8:LoadFont #FonteDiCaratteriTopaz8,"topaz.font",AltezzaFonte
  928. End Statement
  929.  
  930. ;------------------------------------------------------------
  931. ;questa procedura imposta il parlato dell'AMIGA se possibile
  932. ;this procedure sets the AMIGA speech if it is possible
  933. ;-------------------------------------------------------
  934. Statement ImpostaIlParlatoDellAmiga{}
  935. SHARED ParlatoAttivato
  936.  If Exists("LIBS:translator.library") AND Exists("DEVS:narrator.device")
  937.   SetVoice 130,250,0,1,64,22200
  938.   Speak "Speech is enabled!"
  939.   ParlatoAttivato=True
  940.  Else
  941.   Messaggio$="Unable to set speech,|"
  942.   Messaggio$+"required files:|"
  943.   Messaggio$+"LIBS:translator.library|"
  944.   Messaggio$+"DEVS:narrator.device|"
  945.   Messaggio$+"These are supplied with|"
  946.   Messaggio$+"the workbench 1.2|"
  947.   Messaggio$+"Search on Aminet their|"
  948.   Messaggio$+"third part improvement|"
  949.   EZRequest "AmySequencer message",Messaggio$,"OK"
  950.   ParlatoAttivato=False
  951.  EndIf
  952. End Statement
  953.  
  954. ;-----------------------------------------------
  955. ;questa procedura carica le immagini delle note
  956. ;this procedure loads the note images
  957. ;-------------------------------------
  958. Statement CaricaLeImmaginiDelleNote{}
  959.  BitMap 0,126,16,1
  960.  LoadBitMap 0,"Notes.2Cols"
  961.  GetaShape 0,0,0,22,16
  962.  GetaShape 1,23,0,12,16
  963.  GetaShape 2,36,0,12,16
  964.  GetaShape 3,49,0,17,16
  965.  GetaShape 4,67,0,17,16
  966.  GetaShape 5,85,0,17,16
  967.  GetaShape 6,103,0,17,16
  968.  GetaShape 7,121,0,5,16
  969.  Free BitMap 0
  970. End Statement
  971.  
  972. ;----------------------------------------------
  973. ;questa procedura attiva la comunicazione MIDI
  974. ;this procedure activates the MIDI communication
  975. ;------------------------------------------------
  976. Statement AttivaMIDI{}
  977. SHARED MIDIAttivato
  978.  Use Window #FinestraPrincipale
  979.  WJam #DueColoriConSfondoPieno
  980.  Repeat
  981.   If MIDIAttivato=True Then CloseSerial 0
  982.   WLocate 0,0:WColour 0,0:Print SPACE$(80)
  983.   WLocate 0,0:WColour 3:Print "Please type your MIDI device name>"
  984.   DispositivoMIDI$=StripLead$(StripTrail$(Edit$("serial.device",35),Asc(" ")),Asc(" "))
  985.   WLocate 0,0:Print SPACE$(80)
  986.   If DispositivoMIDI$<>""
  987.    MIDIAttivato=OpenSerial(DispositivoMIDI$,0,31250,16)
  988.    If MIDIAttivato=0
  989.     EZRequest "AmySequencer message","Unable to open MIDI|on "+DispositivoMIDI$,"OK"
  990.    Else
  991.     SetSerialBuffer 0,64
  992.     MIDIAttivato=True
  993.    EndIf
  994.   EndIf
  995.  Until MIDIAttivato=True
  996.  EZRequest "AmySequencer message","MIDI has been activated|on "+DispositivoMIDI$,"OK"
  997.  WJam #UnColoreConSfondoTrasparente
  998. End Statement
  999.  
  1000. ;-------------------------------------------------
  1001. ;questa procedura cambia la misurazione del tempo
  1002. ;this procedure change the time misuration
  1003. ;------------------------------------------
  1004. Statement CambiaLaMisuraDelTempo{}
  1005. SHARED Battiti
  1006. SHARED Misure
  1007.  Use Window #FinestraPrincipale
  1008.  WJam #DueColoriConSfondoPieno
  1009.  WLocate 0,0:WColour 0,0:Print SPACE$(80)
  1010.  WLocate 0,0:WColour 3:Print "Please type the basic time beat>"
  1011.  Battiti=Val(StripLead$(StripTrail$(Edit$("4",35),Asc(" ")),Asc(" ")))
  1012.  Battiti=Min(Max(Battiti,1),16)
  1013.  WLocate 0,0:Print SPACE$(80)
  1014.  WLocate 0,0:WColour 0,0:Print SPACE$(80)
  1015.  WLocate 0,0:WColour 3:Print "Please type the basic time measures>"
  1016.  Misure=Val(StripLead$(StripTrail$(Edit$("4",35),Asc(" ")),Asc(" ")))
  1017.  Misure=Min(Max(Misure,1),8)
  1018.  WJam #UnColoreConSfondoTrasparente
  1019. End Statement
  1020.  
  1021. ;--------------------------------------------------------
  1022. ;questa procedura mostra gli eventi musicali disponibili
  1023. ;this procedure shows the available musical events
  1024. ;--------------------------------------------------
  1025. Statement MostraGliEventiMusicaliDisponibili{}
  1026. SHARED MassimoEventiMusicali
  1027. SHARED Sequenza()
  1028. SHARED TotaleEventiMusicali
  1029.  Sequenze.w=0
  1030.  TotaleEventiMusicali=0
  1031.  PushItem Sequenza()
  1032.  ResetList Sequenza()
  1033.  While NextItem(Sequenza())=True
  1034.   If Sequenza()\Durata>0
  1035.    TotaleEventiMusicali+Sequenza()\EventiMusicali
  1036.    Sequenze+1
  1037.   EndIf
  1038.  Wend
  1039.  PopItem Sequenza()
  1040.  WLocate 0,0:WColour 3:Print MassimoEventiMusicali," events allocated, ",TotaleEventiMusicali," event"
  1041.  If TotaleEventiMusicali<>1 Then Print "s"
  1042.  Print " used, "
  1043.  If Sequenze>0
  1044.   Print Str$(Sequenze)," sequence":If Sequenze>1 Then Print "s"
  1045.  Else
  1046.   Print "no sequences"
  1047.  EndIf
  1048. End Statement
  1049.  
  1050. ;-------------------------------------------------------------------
  1051. ;mostra la velocita' di esecuzione delle note in battute per minuto
  1052. ;shows the execution velocity in measures per minute
  1053. ;----------------------------------------------------
  1054. Statement MostraLeBattutePerMinuto{BattutePerMinuto.w,CanaleEvento.b,Modo.b}
  1055. SHARED AltezzaInternaFinestraEditoreSequenza
  1056. SHARED AltezzaInternaFinestraPrincipale
  1057. SHARED XPosSfondoBattutePerMinuto
  1058. SHARED YPosSfondoBattutePerMinuto
  1059.  TicPerCinquantesimoDiSecondo.f=BattutePerMinuto*192*4/3000
  1060.  WJam #DueColoriConSfondoPieno
  1061.  If Modo=#EseguiGliEventiMusicaliDallaFinestraPrincipale
  1062.   XMessaggio.w=0
  1063.   YMessaggio.w=AltezzaInternaFinestraPrincipale-8-8
  1064.   WLocate XMessaggio,YMessaggio
  1065.   Print SPACE$(Len("BPM>000-ticks/50th>000.0"))
  1066.   WBlit 8,XPosSfondoBattutePerMinuto,YPosSfondoBattutePerMinuto
  1067.   WJam #UnColoreConSfondoTrasparente:WColour 3
  1068.  EndIf
  1069.  If Modo=#EseguiGliEventiMusicaliDallEditoreSequenza
  1070.   WColour CanaleEvento-1,16-CanaleEvento
  1071.   XMessaggio=16*16+8*3+8*4+8*6
  1072.   YMessaggio=AltezzaInternaFinestraEditoreSequenza-8
  1073.   Print SPACE$(80-XMessaggio/8)
  1074.  EndIf
  1075.  WLocate XMessaggio,YMessaggio
  1076.  Format "000":Print "BPM>",BattutePerMinuto
  1077.  Format "000.0":Print"-ticks/50th>",TicPerCinquantesimoDiSecondo
  1078.  Format ""
  1079.  
  1080. End Statement
  1081.  
  1082. ;------------------------------------------------------
  1083. ;questa procedura mostra il tempo in battiti su misure
  1084. ;this procedure shows the tempo by beats per measures
  1085. ;-----------------------------------------------------
  1086. Statement MostraIlTempo{Tempo.b,CanaleEvento.b,Modo.b}
  1087. SHARED AltezzaInternaFinestraEditoreSequenza
  1088. SHARED AltezzaInternaFinestraPrincipale
  1089. SHARED XPosSfondoTempo
  1090. SHARED YPosSfondoTempo
  1091.  WJam #DueColoriConSfondoPieno
  1092.  If Modo=#EseguiGliEventiMusicaliDallaFinestraPrincipale
  1093.   XMessaggio.w=(80-Len("Tempo00/00"))*8
  1094.   YMessaggio.w=AltezzaInternaFinestraPrincipale-8-8
  1095.   WLocate XMessaggio,YMessaggio
  1096.   Print SPACE$(Len("Tempo00/00"))
  1097.   WBlit 9,XPosSfondoTempo,YPosSfondoTempo
  1098.   WJam #UnColoreConSfondoTrasparente:WColour 3
  1099.  EndIf
  1100.  If Modo=#EseguiGliEventiMusicaliDallEditoreSequenza
  1101.   WColour CanaleEvento-1,16-CanaleEvento
  1102.   XMessaggio=16*16+8*3+8*4+8*6
  1103.   YMessaggio=AltezzaInternaFinestraEditoreSequenza-8
  1104.   Print SPACE$(80-XMessaggio/8)
  1105.  EndIf
  1106.  WLocate XMessaggio,YMessaggio
  1107.  Format "00":Print "Tempo",Str$(Tempo MOD 16+1),"/",Str$(Tempo/16+1):Format ""
  1108. End Statement
  1109.  
  1110. ;----------------------------------------------------------------------------
  1111. ;questa procedura crea una tabella di riconoscimento delle note, memorizzata
  1112. ; nell'array TipoDiNota()
  1113. ;this procedure crates a referring note recognition table, stored in the
  1114. ; TipoDiNota() array (that means Note Kind)
  1115. ;-------------------------------------------
  1116. Statement ImpostaIlTipoDiNota{Nota.b}
  1117. SHARED TipoDiNota()
  1118.  
  1119. ;--------------------------------------------
  1120. ;questa variabile indica l'ottava della nota
  1121. ;this variable state the note octave
  1122. ;------------------------------------
  1123.  OttavaDellaNota.b=Nota/12
  1124.  
  1125.  TipoDiNota(Nota)\Ottava=OttavaDellaNota
  1126.  
  1127. ;-----------------------------------------------------------------------
  1128. ;questa variabile indica a quali delle 12 note dodici note fondamentali
  1129. ; corrisponde la nota corrente
  1130. ;this variable marks which of 12 fundamental notes corresponds the current
  1131. ; note
  1132. ;------
  1133.  NotaNellOttava.b=Nota MOD 12
  1134.  
  1135.  Select NotaNellOttava
  1136.  
  1137. ;------------------
  1138. ;la nota e' un Do?
  1139. ;is the given note a C?
  1140. ;-----------------------
  1141.  Case 0
  1142.   TipoDiNota(Nota)\NomeItaliano="Do"
  1143.   TipoDiNota(Nota)\NomeInglese="C"
  1144.   TipoDiNota(Nota)\Diesis=False
  1145.  
  1146. ;-------------------------------
  1147. ;la nota e' un Do diesis (Do#)?
  1148. ;is the given note a C diesis (C#)?
  1149. ;-----------------------------------
  1150.  Case 1
  1151.   TipoDiNota(Nota)\NomeItaliano="Do#"
  1152.   TipoDiNota(Nota)\NomeInglese="C#"
  1153.   TipoDiNota(Nota)\Diesis=True
  1154.  
  1155. ;------------------
  1156. ;la nota e' un Re?
  1157. ;is the given note a D?
  1158. ;-----------------------
  1159.  Case 2
  1160.   TipoDiNota(Nota)\NomeItaliano="Re"
  1161.   TipoDiNota(Nota)\NomeInglese="D"
  1162.   TipoDiNota(Nota)\Diesis=False
  1163.  
  1164. ;-------------------------------
  1165. ;la nota e' un Re diesis (Re#)?
  1166. ;is the given note a D diesis (D#)?
  1167. ;-----------------------------------
  1168.  Case 3
  1169.   TipoDiNota(Nota)\NomeItaliano="Re#"
  1170.   TipoDiNota(Nota)\NomeInglese="D#"
  1171.   TipoDiNota(Nota)\Diesis=True
  1172.  
  1173. ;------------------
  1174. ;la nota e' un Mi?
  1175. ;is the given note a E?
  1176. ;-----------------------
  1177.  Case 4
  1178.   TipoDiNota(Nota)\NomeItaliano="Mi"
  1179.   TipoDiNota(Nota)\NomeInglese="E"
  1180.   TipoDiNota(Nota)\Diesis=False
  1181.  
  1182. ;------------------
  1183. ;la nota e' un Fa?
  1184. ;is the given note a F?
  1185. ;-----------------------
  1186.  Case 5
  1187.   TipoDiNota(Nota)\NomeItaliano="Fa"
  1188.   TipoDiNota(Nota)\NomeInglese="F"
  1189.   TipoDiNota(Nota)\Diesis=False
  1190.  
  1191. ;-------------------------------
  1192. ;la nota e' un Fa diesis (Fa#)?
  1193. ;is the given note a F diesis (F#)?
  1194. ;-----------------------------------
  1195.  Case 6
  1196.   TipoDiNota(Nota)\NomeItaliano="Fa#"
  1197.   TipoDiNota(Nota)\NomeInglese="F#"
  1198.   TipoDiNota(Nota)\Diesis=True
  1199.  
  1200. ;-------------------
  1201. ;la nota e' un Sol?
  1202. ;is the given note a G?
  1203. ;-----------------------
  1204.  Case 7
  1205.   TipoDiNota(Nota)\NomeItaliano="Sol"
  1206.   TipoDiNota(Nota)\NomeInglese="G"
  1207.   TipoDiNota(Nota)\Diesis=False
  1208.  
  1209. ;---------------------------------
  1210. ;la nota e' un Sol diesis (Sol#)?
  1211. ;is the given note a G diesis (G#)?
  1212. ;-----------------------------------
  1213.  Case 8
  1214.   TipoDiNota(Nota)\NomeItaliano="Sol#"
  1215.   TipoDiNota(Nota)\NomeInglese="G#"
  1216.   TipoDiNota(Nota)\Diesis=True
  1217.  
  1218. ;------------------
  1219. ;la nota e' un La?
  1220. ;is the given note an A?
  1221. ;------------------------
  1222.  Case 9
  1223.   TipoDiNota(Nota)\NomeItaliano="La"
  1224.   TipoDiNota(Nota)\NomeInglese="A"
  1225.   TipoDiNota(Nota)\Diesis=False
  1226.  
  1227. ;-------------------------------
  1228. ;la nota e' un La diesis (La#)?
  1229. ;is the given note an A diesis (A#)?
  1230. ;------------------------------------
  1231.  Case 10
  1232.   TipoDiNota(Nota)\NomeItaliano="La#"
  1233.   TipoDiNota(Nota)\NomeInglese="A#"
  1234.   TipoDiNota(Nota)\Diesis=True
  1235.  
  1236. ;------------------
  1237. ;la nota e' un Si?
  1238. ;is the given note a B?
  1239. ;-----------------------
  1240.  Case 11
  1241.   TipoDiNota(Nota)\NomeItaliano="Si"
  1242.   TipoDiNota(Nota)\NomeInglese="B"
  1243.   TipoDiNota(Nota)\Diesis=False
  1244.  
  1245.  End Select
  1246. End Statement
  1247.  
  1248. Statement CalcolaLaFrequenzaEdIlPeriodoDelleNote{}
  1249. SHARED PeriFreq()
  1250. SHARED DistanzaSemitono
  1251. ;-------------------------------------------------------------------------
  1252. ;per ottenere la frequenza di tutte le 128 note, si parte dal La della 4a
  1253. ; ottava (la prima e' l'ottava zero), la cui frequenza e' nota e la si
  1254. ; moltiplica o divide per la distanza minima tra due note che e' il semitono;
  1255. ; per ottenere il periodo si divide una delle costanti di temporizzazione, a
  1256. ; seconda che il il proprio AMIGA usi uno schermo PAL o NTSC, per la frequenza
  1257. ; della nota; queste costanti sono riportate sul MANUALE DI RIFERIMENTO PER
  1258. ; L'HARDWARE AMIGA
  1259. ;to obtain all 128 notes it starts from the A from the 4rd octave (the 1st is
  1260. ; the zero octave) that has a known frequency, and it multiply or divide this
  1261. ; for the minimum distance between two notes that is the semitone; to obtain
  1262. ; the period it divides one of the timing constants, depending on your AMIGA
  1263. ; uses a PAL or NTSC screen, for the note frequency; these constants are
  1264. ; reported on the AMIGA HARDWARE REFERENCE MANUAL
  1265. ;-------------------------------------------------
  1266. PeriFreq(45)\Frequenza=440
  1267. If NTSC=True
  1268.  PeriFreq(45)\Periodo=#TemporizzazioneNTSC/PeriFreq(45)\Frequenza
  1269. Else
  1270.  PeriFreq(45)\Periodo=#TemporizzazionePAL/PeriFreq(45)\Frequenza
  1271. EndIf
  1272. ImpostaIlTipoDiNota{45}
  1273.  
  1274. For Nota.w=46 To 127
  1275.  PeriFreq(Nota)\Frequenza=PeriFreq(Nota-1)\Frequenza*DistanzaSemitono
  1276.  If NTSC=True
  1277.   PeriFreq(Nota)\Periodo=#TemporizzazioneNTSC/PeriFreq(Nota)\Frequenza
  1278.  Else
  1279.   PeriFreq(Nota)\Periodo=#TemporizzazionePAL/PeriFreq(Nota)\Frequenza
  1280.  EndIf
  1281.  ImpostaIlTipoDiNota{Nota}
  1282. Next Nota
  1283.  
  1284. For Nota=44 To 0 Step -1
  1285.  PeriFreq(Nota)\Frequenza=PeriFreq(Nota+1)\Frequenza/DistanzaSemitono
  1286.  If NTSC=True
  1287.   PeriFreq(Nota)\Periodo=#TemporizzazioneNTSC/PeriFreq(Nota)\Frequenza
  1288.  Else
  1289.   PeriFreq(Nota)\Periodo=#TemporizzazionePAL/PeriFreq(Nota)\Frequenza
  1290.  EndIf
  1291.  ImpostaIlTipoDiNota{Nota}
  1292. Next Nota
  1293. End Statement
  1294.  
  1295. ;------------------------------------------------------------------------------
  1296. ;la seguente procedura converte un valore temporale da tic in battute, battiti
  1297. ; e tic; la variabile OrigineZero serve per la differente visualizzazione
  1298. ; della durata delle note che, se vera, parte da zero
  1299. ;the following procedure converts a time value from ticks into bars, beats and
  1300. ; ticks; the OrigineZero variable is used for the different note length
  1301. ; displacement that, if this is true, starts from zero instead of starting
  1302. ; from one
  1303. ;----------
  1304. Statement ConvertiIlTempoInBattute{Tempo.l,Battiti.b,Misure.b,OrigineZero.b}
  1305.  If OrigineZero=True
  1306.   Battuta.l=Tempo/(192*4.0)/Misure*Battiti
  1307.   Battito.b=(Tempo/(192/(Misure/4.0))) MOD Battiti
  1308.  Else
  1309.   Battuta=Tempo/(192*4.0)/Misure*Battiti+1
  1310.   Battito=(Tempo/(192/(Misure/4.0))) MOD Battiti+1
  1311.  EndIf
  1312.  Print Battuta,".",Battito
  1313.  Tic.w=Tempo MOD (192/(Misure/4.0))
  1314.  If Tic>0 Then Print ".",Tic
  1315. End Statement
  1316.  
  1317. ;-------------------------------------------------
  1318. ;questa procedura imposta le barre di scorrimento
  1319. ;this procedure sets sliders
  1320. ;----------------------------
  1321. Statement ImpostaSlider{Slider.l,XPos.w,YPos.w,Orientamento$,Parametri.l,ListaGadgetSlider.l}
  1322. SHARED XLunSlider
  1323. SHARED YLunSlider
  1324.  Orientamento$=UCase$(Orientamento$)
  1325.  If Orientamento$="HORIZONTAL" Then Parametri+#MovimentoOrizzontale
  1326.  If Orientamento$="VERTICAL" Then Parametri+#MovimentoVerticale
  1327.  PropGadget ListaGadgetSlider,XPos,YPos,Parametri,Slider,XLunSlider,YLunSlider
  1328. End Statement
  1329.  
  1330. ;------------------------------------------------
  1331. ;questa procedura mostra le barre di scorrimento
  1332. ;this procedure showss the sliders
  1333. ;----------------------------------
  1334. Statement MostraSlider{Slider.l,ValoreDato.l,ValoreMassimo.l,Orientamento$,ListaGadgetSlider.l,FinestraSlider.l}
  1335.  Orientamento$=UCase$(Orientamento$)
  1336.  If Orientamento$="HORIZONTAL"
  1337.   SetHProp ListaGadgetSlider,Slider,ValoreDato/ValoreMassimo,1/ValoreMassimo
  1338.  EndIf
  1339.  If Orientamento$="VERTICAL"
  1340.   SetVProp ListaGadgetSlider,Slider,ValoreDato/ValoreMassimo,1/ValoreMassimo
  1341.  EndIf
  1342.  Redraw FinestraSlider,Slider
  1343. End Statement
  1344.  
  1345. ;--------------------------------------------------
  1346. ;questa procedura gestisce le barre di scorrimento
  1347. ;this procedure manage the sliders
  1348. ;----------------------------------
  1349. Function .l ValoreSlider{Slider.l,ValoreMassimo.l,LunghezzaSlider.l,Orientamento$,ListaGadgetSlider.l}
  1350.  Orientamento$=UCase$(Orientamento$)
  1351.  If Orientamento$="HORIZONTAL"
  1352.   ValoreSlider.f=HPropPot(ListaGadgetSlider,Slider)*ValoreMassimo
  1353.   ValoreIndicatoDalTopo.w=EMouseX*ValoreMassimo/LunghezzaSlider
  1354.  EndIf
  1355.  If Orientamento$="VERTICAL"
  1356.   ValoreSlider=VPropPot(ListaGadgetSlider,Slider)*ValoreMassimo
  1357.   ValoreIndicatoDalTopo=EMouseY*ValoreMassimo/LunghezzaSlider
  1358.  EndIf
  1359.  ValoreIndicatoDalloSlider.l=Int(ValoreSlider)
  1360.  If ValoreIndicatoDalTopo>ValoreIndicatoDalloSlider Then ValoreIndicatoDalloSlider+1
  1361.  If ValoreIndicatoDalTopo<ValoreIndicatoDalloSlider Then ValoreIndicatoDalloSlider-1
  1362.  ValoreIndicatoDalloSlider=Min(Max(ValoreIndicatoDalloSlider,0),ValoreMassimo)
  1363.  Function Return ValoreIndicatoDalloSlider
  1364. End Function
  1365.  
  1366. ;--------------------------------------------------------------
  1367. ;questa procedura cancella il file storico dei progetti aperti
  1368. ;this procedure clears the loaded projects history file
  1369. ;-------------------------------------------------------
  1370. Statement CancellaLaStoriaDeiProgettiAperti{}
  1371. SHARED ProgettoAperto$()
  1372. SHARED StoriaDeiProgettiAperti
  1373. SHARED VoceMenuEsci
  1374.  KillFile "ProjectsHistory"
  1375.  VoceMenuEsci=4
  1376.  StoriaDeiProgettiAperti=False
  1377.  For ProgettoAperto.b=0 To 4
  1378.   ProgettoAperto$(ProgettoAperto)=""
  1379.  Next ProgettoAperto
  1380. End Statement
  1381.  
  1382. ;------------------------------------------------------------
  1383. ;questa procedura carica il file storico dei progetti aperti
  1384. ;this procedure loads the loaded projects history file
  1385. ;------------------------------------------------------
  1386. Statement CaricaLaStoriaDeiProgettiAperti{}
  1387. SHARED ProgettoAperto$()
  1388. SHARED StoriaDeiProgettiAperti
  1389. SHARED VoceMenuEsci
  1390.  StoriaDeiProgettiAperti=ReadFile(0,"ProjectsHistory")
  1391.  If StoriaDeiProgettiAperti=True
  1392.   FileInput 0
  1393.   ProgettoAperto=0
  1394.   Repeat
  1395.    Dato$=Inkey$
  1396.    If Dato$=Chr$(10)
  1397.     ProgettoAperto+1
  1398.     VoceMenuEsci+1
  1399.    Else
  1400.     ProgettoAperto$(ProgettoAperto)+Dato$
  1401.    EndIf
  1402.   Until Dato$=""
  1403.   CloseFile 0
  1404.   PopInput
  1405.  EndIf
  1406. End Statement
  1407.  
  1408. ;------------------------------------------------------------------
  1409. ;crea la bitmap per l'immagine di sfondo della finestra principale
  1410. ;creates the bitmap for the background pic of the main window
  1411. ;-------------------------------------------------------------
  1412. Statement CreaLaBitmapPerLImmagineDiSfondo{}
  1413.  
  1414. ;----------------------------------------
  1415. ;crea la bitmap per l'immagine di sfondo
  1416. ;creates the bitmap for the background pic
  1417. ;------------------------------------------
  1418.  BitMap #BitmapImmagineDiSfondo,640,240,4
  1419.  
  1420. End Statement
  1421.  
  1422. ;-------------------------------------------------------------------
  1423. ;carica l'immagine di sfondo della finestra principale nella bitmap
  1424. ;loads the background pic of the main window into the bitmap
  1425. ;------------------------------------------------------------
  1426. Statement CaricaLImmagineDiSfondoNellaBitmap{}
  1427. SHARED ColoriOriginali
  1428.  
  1429. If ColoriOriginali=True
  1430.  ImmagineDiSfondo$="BackPicOC.16Cols"
  1431. Else
  1432.  ImmagineDiSfondo$="BackPic.16Cols"
  1433. EndIf
  1434.  
  1435. ;----------------------------------------------------------------------------
  1436. ;carica l'immagine di sfondo per la finestra principale nella bitmap creata
  1437. ; per questa
  1438. ;loads the main window background image into the bitmap creted for it
  1439. ;---------------------------------------------------------------------
  1440.  LoadBitMap #BitmapImmagineDiSfondo,ImmagineDiSfondo$,#TavolozzaDeiColori
  1441.  
  1442. ;---------------------------------------------------
  1443. ;usa la tavolozza dei colori dell'immagine caricata
  1444. ;use loaded image colours palette
  1445. ;---------------------------------
  1446.  Use Palette #TavolozzaDeiColori
  1447.  
  1448. End Statement
  1449.  
  1450. ;------------------------------------
  1451. ;questa procedura imposta lo schermo
  1452. ;this procedure sets the screen
  1453. ;-------------------------------
  1454. Statement ImpostaLoSchermo{}
  1455. SHARED AltezzaFonte
  1456. SHARED AltezzaSchermo
  1457. SHARED LarghezzaSchermo
  1458. SHARED TracceVisibili
  1459.  
  1460. ;--------------------------------------
  1461. ;imposta la fonte di caratteri globale
  1462. ;sets the global characters font
  1463. ;--------------------------------
  1464.  Use IntuiFont #FonteDiCaratteriTopaz8
  1465.  
  1466. ;------------------------------------
  1467. ;inizializza la tavolozza dei colori
  1468. ;initializes the colours palette
  1469. ;--------------------------------
  1470.  InitPalette #TavolozzaDeiColori,16
  1471.  
  1472. ;-------------------------------
  1473. ;carica i colori per lo schermo
  1474. ;loads colours for screen
  1475. ;-------------------------
  1476. ; For Colore.b=0 To 15
  1477. ;  Read Rosso.b
  1478. ;  Read Verde.b
  1479. ;  Read Blu.b
  1480. ;  PalRGB #TavolozzaDeiColori,Colore,Rosso,Verde,Blu
  1481. ; Next Colore
  1482.  
  1483. ;----------------------------------------------------------------
  1484. ;imposta le penne dello schermo con i migliori colori (ROM 2.0+)
  1485. ;sets screen pens with best colours (ROM 2.0+)
  1486. ;----------------------------------------------
  1487.  ScreenPens 3,2,0,1,3,1,2
  1488.  
  1489. ;------------------------------------------------
  1490. ;apre lo schermo in alta risoluzione a 16 colori
  1491. ;opens high resolution screen with 16 colours
  1492. ;---------------------------------------------
  1493.  Screen #Schermo,4+8,"AmySequencer by Stefano Maria Regattin"
  1494.  
  1495. ;-----------------------------
  1496. ;usa la tavolozza dei colori
  1497. ;use colours palette
  1498. ;--------------------
  1499.  Use Palette #TavolozzaDeiColori
  1500.  
  1501. ;-------------------------------------------------------------------------------
  1502. ;questa variabile contiene l'indirizzo di memoria della struttura dello schermo
  1503. ;this variable retains the screen structure memory address
  1504. ;----------------------------------------------------------
  1505.  IndirizzoSchermo.l=Peek.l(Addr Screen(0))
  1506.  
  1507. ;----------------------------------------------------------
  1508. ;questa variabile contiene la vera larghezza Dello schermo
  1509. ;this variable retains the true screen width
  1510. ;--------------------------------------------
  1511.  LarghezzaSchermo=Peek.w(IndirizzoSchermo+12)
  1512.  
  1513. ;--------------------------------------------------------
  1514. ;questa variabile contiene la vera altezza dello schermo
  1515. ;this variable retains the true screen height
  1516. ;---------------------------------------------
  1517.  AltezzaSchermo=Peek.w(IndirizzoSchermo+14)
  1518.  
  1519. ;-------------------------------------------------------------
  1520. ;questa variabile indica il massimo numero di tracce visibili
  1521. ;this variable states the visible tracks maximum number
  1522. ;-------------------------------------------------------
  1523.  TracceVisibili=(AltezzaSchermo-(AltezzaFonte+3)-8-8-8)/8
  1524.  
  1525. End Statement
  1526.  
  1527. ;-----------------------------------------------------------------------
  1528. ;questa procedura mostra l'immagine di sfondo nella finestra principale
  1529. ;this procedure shows the  background pic into the main window
  1530. ;--------------------------------------------------------------
  1531. Statement MettiLImmagineDiSfondoNellaFinestraPrincipale{}
  1532.  
  1533. ;---------------------------------------------------------
  1534. ;copia l'immamgine dalla bitmap nella finestra principale
  1535. ;copies the pic from the bitmap into the main window
  1536. ;----------------------------------------------------
  1537.  BitMaptoWindow #BitmapImmagineDiSfondo,#FinestraPrincipale,0,0,0,0,640,240
  1538.  
  1539. End Statement
  1540.  
  1541. Statement CopiaLoSfondoSottoAlleBattutePerMinuto{}
  1542. SHARED AltezzaInternaFinestraPrincipale
  1543. SHARED LarghezzaInternaFinestraPrincipale
  1544. SHARED XPosSfondoBattutePerMinuto
  1545. SHARED YPosSfondoBattutePerMinuto
  1546.  XPosSfondoBattutePerMinuto=0
  1547.  YPosSfondoBattutePerMinuto=AltezzaInternaFinestraPrincipale-8-8
  1548.  XLunSfondoBattutePerMinuto.w=Len("BPM>000-ticks/50th>000.0")*8
  1549.  YLunSfondoBattutePerMinuto.b=8
  1550.  GetaShape 8,XPosSfondoBattutePerMinuto,YPosSfondoBattutePerMinuto,XLunSfondoBattutePerMinuto,YLunSfondoBattutePerMinuto
  1551. End Statement
  1552.  
  1553. Statement CopiaLoSfondoSottoAlTempo{}
  1554. SHARED AltezzaInternaFinestraPrincipale
  1555. SHARED LarghezzaInternaFinestraPrincipale
  1556. SHARED XPosSfondoTempo
  1557. SHARED YPosSfondoTempo
  1558.  XPosSfondoTempo=LarghezzaInternaFinestraPrincipale-1-(Len("Tempo>00/00")*8-1)
  1559.  YPosSfondoTempo=AltezzaInternaFinestraPrincipale-8-8
  1560.  XLunSfondoTempo.b=Len("Tempo>00/00")*8
  1561.  YLunSfondoTempo.b=8
  1562.  GetaShape 9,XPosSfondoTempo,YPosSfondoTempo,XLunSfondoTempo,YLunSfondoTempo
  1563. End Statement
  1564.  
  1565. ;-------------------------------------------------------------------------------
  1566. ;Questa procedura imposta la finestra principale invisibile e reimposta il menu
  1567. ; principale
  1568. ;this procedure sets the main invisible window and resets the main menu
  1569. ;-----------------------------------------------------------------------
  1570. Statement ImpostaLaFinestraPrincipale{}
  1571. SHARED AltezzaFonte
  1572. SHARED AltezzaInternaFinestraPrincipale
  1573. SHARED AltezzaSchermo
  1574. SHARED BattutePerMinuto
  1575. SHARED FineMotivo
  1576. SHARED FinestraPrincipaleAperta
  1577. SHARED LarghezzaInternaFinestraPrincipale
  1578. SHARED LarghezzaSchermo
  1579. SHARED ProgettoAperto$()
  1580. SHARED StoriaDeiProgettiAperti
  1581. SHARED TicPerCinquantesimoDiSecondo
  1582. SHARED TracceVisibili
  1583. SHARED VoceMenuEsci
  1584. SHARED XLunSlider
  1585. SHARED YLunSlider
  1586.  
  1587. ;-----------------------------------------------
  1588. ;se la finestra era gia' stato aperto la chiude
  1589. ;if window was opened it close it
  1590. ;---------------------------------
  1591.  If FinestraPrincipaleAperta=True
  1592.   BeepScreen #Schermo
  1593.   Free GadgetList #ListaGadgetPrincipale
  1594.   Free MenuList #ListaMenuPrincipale
  1595.   CloseWindow #FinestraPrincipale
  1596.  EndIf
  1597.  
  1598. ;-----------------------------------------------------------------------
  1599. ;imposta il colore del testo nei menu' a quello piu' chiaro disponibile
  1600. ;sets text menu colour to the brightest available
  1601. ;-------------------------------------------------
  1602.  MenuColour 3
  1603.  
  1604. ;-------------------------
  1605. ;imposta il menu' Project
  1606. ;sets Project menu
  1607. ;------------------
  1608.  MenuTitle #ListaMenuPrincipale,0,"Project"
  1609.  MenuItem #ListaMenuPrincipale,0,0,0,"New"
  1610.  MenuItem #ListaMenuPrincipale,0,0,1,"Load"
  1611.  MenuItem #ListaMenuPrincipale,0,0,2,"Save"
  1612.  MenuItem #ListaMenuPrincipale,0,0,3,"Save as"
  1613.  If StoriaDeiProgettiAperti=True
  1614.   For ProgettoAperto.b=4 To VoceMenuEsci-1
  1615.    MenuItem 0,0,0,ProgettoAperto,ProgettoAperto$(ProgettoAperto-4)
  1616.   Next ProgettoAperto
  1617.  EndIf
  1618.  MenuItem 0,0,0,VoceMenuEsci,"Quit"
  1619.  
  1620. ;--------------------------
  1621. ;imposta il menu' Controls
  1622. ;sets Controls menu
  1623. ;------------------
  1624.  MenuTitle #ListaMenuPrincipale,1,"Controls"
  1625.  MenuItem #ListaMenuPrincipale,0,1,0,"Play"
  1626.  MenuItem #ListaMenuPrincipale,0,1,1,"Record"
  1627.  
  1628. ;---------------------------
  1629. ;imposta il menu' Sequences
  1630. ;sets Sequences menu
  1631. ;--------------------
  1632.  MenuTitle #ListaMenuPrincipale,2,"Sequence"
  1633.  MenuItem #ListaMenuPrincipale,0,2,0,"Edit"
  1634.  MenuItem #ListaMenuPrincipale,0,2,1,"Name"
  1635.  
  1636. ;------------------------
  1637. ;imposta il menu' Sounds
  1638. ;sets Sounds menu
  1639. ;-----------------
  1640.  MenuTitle #ListaMenuPrincipale,3,"Sounds"
  1641.  MenuItem #ListaMenuPrincipale,0,3,0,"Edit"
  1642.  
  1643. ;-----------------------
  1644. ;imposta il menu' Prefs
  1645. ;sets Prefs menu
  1646. ;----------------
  1647.  MenuTitle #ListaMenuPrincipale,4,"Prefs"
  1648.  MenuItem #ListaMenuPrincipale,0,4,0,"Set MIDI device"
  1649.  MenuItem #ListaMenuPrincipale,1,4,1,"  Original colours"
  1650.  MenuItem #ListaMenuPrincipale,0,4,2,"Clear projects history"
  1651.  
  1652. ;-------------------------------------------------------------------
  1653. ;apre la finestra principale per ricavarne la larghezza e l'altezza
  1654. ;opens main window to obtain its width and height
  1655. ;-------------------------------------------------
  1656.  XPosF.w=0:YPosF.w=AltezzaFonte+3:XLunF.w=LarghezzaSchermo:YLunF.w=AltezzaSchermo-(AltezzaFonte+3)
  1657.  TipoFinestra.l=#FinestraDiSfondo+#FinestraSenzaBordi+#FinestraAttivata
  1658.  Window #FinestraPrincipale,XPosF,YPosF,XLunF,YLunF,TipoFinestra,"",-1,-1
  1659.  
  1660.  MettiLImmagineDiSfondoNellaFinestraPrincipale{}
  1661.  
  1662. ;-------------------------------------------------------------------------
  1663. ;questa variabile conserva la larghezza interna della finestra principale
  1664. ;this variable stores the inner witdh of the main window
  1665. ;--------------------------------------------------------
  1666.  LarghezzaInternaFinestraPrincipale.w=InnerWidth
  1667.  
  1668. ;----------------------------------------------------------------------
  1669. ;questa variabile conserva l'altezza interna della finestra principale
  1670. ;this variable stores the inner height of the main window
  1671. ;---------------------------------------------------------
  1672.  AltezzaInternaFinestraPrincipale.w=InnerHeight
  1673.  
  1674.  CloseWindow #FinestraPrincipale
  1675.  
  1676. ;----------------------------------------------------------------------
  1677. ;imposta la barra di scorrimento che regola la velocita' di esecuzione
  1678. ;sets the slider that tunes the execution velocity
  1679. ;_-------------------------------------------------
  1680.  XLunSlider=LarghezzaInternaFinestraPrincipale
  1681.  YLunSlider=8
  1682.  ImpostaSlider{1,0,AltezzaInternaFinestraPrincipale-8,"HORIZONTAL",0,#ListaGadgetPrincipale}
  1683.  
  1684. ;-----------------------------------------------------------------------
  1685. ;imposta la barra di scorrimento che serve per visualizzare le sequenze
  1686. ;sets the slider that is used to shows the sequences
  1687. ;_---------------------------------------------------
  1688.  XLunSlider=16
  1689.  YLunSlider=TracceVisibili*8
  1690.  ImpostaSlider{2,0,8,"VERTICAL",0,#ListaGadgetPrincipale}
  1691.  
  1692. ;-----------------------------------------------------------------------
  1693. ;imposta la barra di scorrimento che serve per visualizzare le sequenze
  1694. ;sets the slider that is used to shows the sequences
  1695. ;_---------------------------------------------------
  1696.  XLunSlider=LarghezzaInternaFinestraPrincipale-16
  1697.  YLunSlider=4
  1698.  ImpostaSlider{3,16,8+TracceVisibili*8,"HORIZONTAL",0,#ListaGadgetPrincipale}
  1699.  
  1700. ;------------------------------------------------------------------------------
  1701. ;apre la finestra principale solo per il menu' come invisibile e ci attacca la
  1702. ; lista dei gadget principale
  1703. ;opens main window for menu usage only as invisible and it attaches the main
  1704. ; gadget list
  1705. ;-------------
  1706.  Window #FinestraPrincipale,XPosF,YPosF,XLunF,YLunF,TipoFinestra,"",-1,-1,#ListaGadgetPrincipale
  1707.  
  1708. ;-------------------------------
  1709. ;attacca il menu' alla finestra
  1710. ;attaches menu to window
  1711. ;------------------------
  1712.  SetMenu #ListaMenuPrincipale
  1713.  
  1714. ;----------------------------------------------
  1715. ;imposta la fonte di caratteri per la finestra
  1716. ;sets the font for the window
  1717. ;-----------------------------
  1718.  WindowFont #FonteDiCaratteriTopaz8
  1719.  
  1720.  WJam #UnColoreConSfondoTrasparente
  1721.  
  1722. ;-----------------------------------------------------------------
  1723. ;le finestre di richiesta sono assegnate alla finestra principale
  1724. ;the request windows are assigned to main window
  1725. ;------------------------------------------------
  1726.  EZOutput #FinestraPrincipale
  1727.  
  1728.  FinestraPrincipaleAperta=True
  1729.  
  1730. End Statement
  1731.  
  1732. ;--------------------------------------------------------------------------
  1733. ;questa procedura per ora legge solo il nome di un file e o inserisce nel
  1734. ; menu principale; dovrebbe caricare un progetto di AmySequencer
  1735. ;this procedure till now only reads a file name and put it into the main menu
  1736. ; it should load an AmySequencer project
  1737. ;----------------------------------------
  1738. Statement CaricaUnProgetto{}
  1739. SHARED ProgettoAperto$()
  1740. SHARED StoriaDeiProgettiAperti
  1741. SHARED VoceMenuEsci
  1742.  MaxLen P$=160
  1743.  MaxLen F$=64
  1744.  ProgettoAperto$=FileRequest$("Load AmySequencer project",P$,F$)
  1745.  If ProgettoAperto$<>""
  1746.   For ProgettoAperto.b=0 To 4
  1747.    If ProgettoAperto$=ProgettoAperto$(ProgettoAperto) Then Statement Return
  1748.   Next ProgettoAperto
  1749.   For ProgettoAperto=3 To 0 Step -1
  1750.    ProgettoAperto$(ProgettoAperto+1)=ProgettoAperto$(ProgettoAperto)
  1751.   Next ProgettoAperto
  1752.   ProgettoAperto$(0)=ProgettoAperto$
  1753.   StoriaDeiProgettiAperti=WriteFile(0,"ProjectsHistory")
  1754.   If StoriaDeiProgettiAperti=True
  1755.    FileOutput 0
  1756.    For ProgettoAperto=0 To 4
  1757.     If ProgettoAperto$(ProgettoAperto)<>""
  1758.      NPrint ProgettoAperto$(ProgettoAperto)
  1759.     EndIf
  1760.    Next ProgettoAperto
  1761.    CloseFile 0
  1762.    PopOutput
  1763.    VoceMenuEsci+1
  1764.   EndIf
  1765.  EndIf
  1766. End Statement
  1767.  
  1768. ;-----------------------------------------------------------
  1769. ;questa procedura imposta i suoni da usare con il programma
  1770. ;this procedure sets sounds to use with the program
  1771. ;---------------------------------------------------
  1772. Statement EditoreSuoni{}
  1773. SHARED AltezzaFonte
  1774. SHARED AltezzaSchermo
  1775. SHARED CanaliAttivati
  1776. SHARED LarghezzaSchermo
  1777. SHARED PercorsoSuoni$
  1778. SHARED Suono()
  1779. SHARED XLunSlider
  1780. SHARED YLunSlider
  1781.  
  1782. ;-----------------------------------------------------------------------
  1783. ;imposta il colore del testo nei menu' a quello piu' chiaro disponibile
  1784. ;sets text menu colour to the brightest available
  1785. ;-------------------------------------------------
  1786.  MenuColour 3
  1787.  
  1788.  MenuTitle #ListaMenuEditoreSuoni,0,"Sounds"
  1789.  MenuItem #ListaMenuEditoreSuoni,0,0,0,"Load"
  1790.  MenuItem #ListaMenuEditoreSuoni,0,0,1,"Discard"
  1791.  
  1792.  XPosF.w=0:YPosF.w=AltezzaFonte+3:XLunF.w=LarghezzaSchermo:YLunF.w=AltezzaSchermo-(AltezzaFonte+3)
  1793.  TipoFinestra.l=#GadgetChiudiFinestra+#FinestraConMemoriaSfondo+#FinestraAttivata
  1794.  Window #FinestraEditoreSuoni,XPosF,YPosF,XLunF,YLunF,TipoFinestra,"Sounds Editor",-1,-1
  1795.  LarghezzaInternaFinestraEditoreSuoni.w=InnerWidth
  1796.  AltezzaInternaFinestraEditoreSuoni.w=InnerHeight
  1797.  CloseWindow #FinestraEditoreSuoni
  1798.  
  1799. ;-------------------------------------------------------------------------------
  1800. ;imposta la barra di scorrimento che serve per visualizzare i suoni disponibili
  1801. ;sets the slider that is used to show the available sounds
  1802. ;----------------------------------------------------------
  1803.  XLunSlider=16
  1804.  YLunSlider=AltezzaInternaFinestraEditoreSuoni
  1805.  ImpostaSlider{#SliderEditoreSuoni,LarghezzaInternaFinestraEditoreSuoni-16,0,"VERTICAL",0,#ListaGadgetEditoreSuoni}
  1806.  
  1807.  Window #FinestraEditoreSuoni,XPosF,YPosF,XLunF,YLunF,TipoFinestra,"Sounds Editor",-1,-1,#ListaGadgetEditoreSuoni
  1808.  
  1809. ;-------------------------------
  1810. ;attacca il menu' alla finestra
  1811. ;attaches menu to window
  1812. ;------------------------
  1813.  SetMenu #ListaMenuEditoreSuoni
  1814.  
  1815. ;----------------------------------------------
  1816. ;imposta la fonte di caratteri per la finestra
  1817. ;sets the font for the window
  1818. ;-----------------------------
  1819.  WindowFont #FonteDiCaratteriTopaz8
  1820.  
  1821.  WJam #DueColoriConSfondoPieno
  1822.  
  1823. ;-----------------------------------
  1824. ;sounds window's displacement start
  1825. ;-----------------------------------
  1826.  InizioSuoni.b=0
  1827.  
  1828. ;------------------------
  1829. ;maximum strings length
  1830. ;------------------------
  1831.  LunghezzaMassimaStringhe.b=(LarghezzaInternaFinestraEditoreSuoni-16)/8
  1832.  
  1833. ;---------------------------------
  1834. ;stated by mouse new sound number
  1835. ;---------------------------------
  1836.  NuovoSuonoIndicatoDalTopo.b=-1
  1837.  
  1838. ;-----------------------------
  1839. ;stated by mouse sound number
  1840. ;-----------------------------
  1841.  SuonoIndicatoDalTopo.b=-1
  1842.  
  1843. ;-------------------------------------------------------------------------
  1844. ;imposta la barra di scorrimento della velocita' di esecuzione delle note
  1845. ;sets the notes execution velocity slider
  1846. ;-----------------------------------------
  1847.  MostraSlider{#SliderEditoreSuoni,InizioSuoni,2,"VERTICAL",#ListaGadgetEditoreSuoni,#FinestraEditoreSuoni}
  1848.  
  1849.  Repeat
  1850.   If SecondoClicDelTopo.b=False
  1851.  
  1852.    WCls
  1853.  
  1854.    WLocate 0,0
  1855.  
  1856. ;----------------------
  1857. ;loaded sounds counter
  1858. ;----------------------
  1859.    SuoniCaricati=0
  1860.  
  1861.    For Suono.b=0 To 30
  1862.     AssegnamentoSuono$=Suono(InizioSuoni+Suono)\Nome
  1863.     If AssegnamentoSuono$<>""
  1864.      CanaleSuono.b=Suono(InizioSuoni+Suono)\Canale
  1865.      If CanaleSuono>0
  1866.       WColour CanaleSuono-1,16-CanaleSuono:Format "00":CanaleSuono$=" channel "+Str$(CanaleSuono):Format""
  1867.      Else
  1868.       WColour 1,0:CanaleSuono$=" no channel"
  1869.      EndIf
  1870.      AssegnamentoSuono$+CanaleSuono$
  1871.      AssegnamentoSuono$=Right$(AssegnamentoSuono$,LunghezzaMassimaStringhe)
  1872.      AssegnamentoSuono$+SPACE$(LunghezzaMassimaStringhe-Len(AssegnamentoSuono$))
  1873.      NPrint AssegnamentoSuono$
  1874.      If SuonoIndicatoDalTopo>-1 AND SuonoIndicatoDalTopo=InizioSuoni+Suono
  1875.       If CanaleSuono>0
  1876.        Wline 0,SuonoIndicatoDalTopo*8,LarghezzaInternaFinestraEditoreSuoni-16,SuonoIndicatoDalTopo*8+7,CanaleSuono-1
  1877.        Wline 0,SuonoIndicatoDalTopo*8+7,LarghezzaInternaFinestraEditoreSuoni-16,SuonoIndicatoDalTopo*8,CanaleSuono-1
  1878.       Else
  1879.        Wline 0,SuonoIndicatoDalTopo*8,LarghezzaInternaFinestraEditoreSuoni-16,SuonoIndicatoDalTopo*8+7,1
  1880.        Wline 0,SuonoIndicatoDalTopo*8+7,LarghezzaInternaFinestraEditoreSuoni-16,SuonoIndicatoDalTopo*8,1
  1881.       EndIf
  1882.      EndIf
  1883.      SuoniCaricati+1
  1884.     EndIf
  1885.    Next Suono
  1886.    SecondoClicDelTopo=True
  1887.   EndIf
  1888.  
  1889.   If SuoniCaricati=32
  1890.    Enable #ListaGadgetEditoreSuoni,#SliderEditoreSuoni
  1891.   Else
  1892.    Disable #ListaGadgetEditoreSuoni,#SliderEditoreSuoni
  1893.   EndIf
  1894.   Redraw #FinestraEditoreSuoni
  1895.                                                                                                                               
  1896.   EventoFinestraEditoreSuoni.l=WaitEvent
  1897.  
  1898.   Select EventoFinestraEditoreSuoni
  1899.   Case #HaiPremutoUnTastoDelTopo
  1900.    TastoDelTopoCliccato.b=MButtons:YTopo=WMouseY
  1901.    Select TastoDelTopoCliccato
  1902.    Case #TastoSinistroDelTopoPremuto
  1903.     NuovoSuonoIndicatoDalTopo=YTopo/8+InizioSuoni
  1904.     If NuovoSuonoIndicatoDalTopo=SuonoIndicatoDalTopo
  1905.      If SuoniCaricati>0 AND SuonoIndicatoDalTopo<SuoniCaricati
  1906.       CanaleSuonoIndicatoDalTopo.b=Suono(SuonoIndicatoDalTopo)\Canale
  1907.       If CanaliAttivati=%1111111111111111
  1908.        Suono(SuonoIndicatoDalTopo)\Canale=0
  1909.        CanaliAttivati BitClr (CanaleSuonoIndicatoDalTopo-1)
  1910.       Else
  1911.        If CanaleSuonoIndicatoDalTopo>0
  1912.         If CanaleSuonoIndicatoDalTopo=16
  1913.          Suono(SuonoIndicatoDalTopo)\Canale=0
  1914.          CanaliAttivati BitClr 15
  1915.          CanaleSuono=0
  1916.         Else
  1917.          For CanaleSuono=1 To 15
  1918.           CanaleLibero.b=CanaleSuono+CanaleSuonoIndicatoDalTopo
  1919.           While CanaleLibero>16
  1920.            CanaleLibero-16
  1921.           Wend
  1922.           If CanaliAttivati BitTst (CanaleLibero-1)=False
  1923.            Suono(SuonoIndicatoDalTopo)\Canale=CanaleLibero
  1924.            CanaliAttivati BitClr (CanaleSuonoIndicatoDalTopo-1)
  1925.            CanaliAttivati BitSet (CanaleLibero-1)
  1926.            Pop If:Pop For:Pop If:Pop If:Pop If:Goto FineCicloAssegnamentoCanali
  1927.           EndIf
  1928.          Next CanaleSuono
  1929.         EndIf
  1930.        Else
  1931.         For CanaleSuono=0 To 15
  1932.          If CanaliAttivati BitTst CanaleSuono=False
  1933.           Suono(SuonoIndicatoDalTopo)\Canale=CanaleSuono+1
  1934.           CanaliAttivati BitSet CanaleSuono
  1935.           Pop If:Pop For:Pop If:Pop If:Goto FineCicloAssegnamentoCanali
  1936.          EndIf
  1937.         Next CanaleSuono
  1938.        EndIf
  1939.       EndIf
  1940. FineCicloAssegnamentoCanali
  1941.       If CanaleSuono=16 Then EZRequest "AmySequencer Message","No free channel available","OK"
  1942.      EndIf
  1943.     Else
  1944.      SuonoIndicatoDalTopo=NuovoSuonoIndicatoDalTopo
  1945.     EndIf
  1946.     SecondoClicDelTopo=False
  1947.    Case #TastoSinistroDelTopoRilasciato
  1948.     SecondoClicDelTopo=True
  1949.    End Select
  1950. ;  Case #HaiPremutoUnGadget
  1951. ;   InizioSuoni=ValoreSlider{#SliderEditoreSuoni,2,AltezzaInternaFinestraEditoreSuoni,"VERTICAL",#ListaGadgetEditoreSuoni}
  1952. ;   SecondoClicDelTopo=False
  1953.   Case #HaiRilasciatoUnGadget
  1954.    InizioSuoni=ValoreSlider{#SliderEditoreSuoni,2,AltezzaInternaFinestraEditoreSuoni,"VERTICAL",#ListaGadgetEditoreSuoni}
  1955.    SecondoClicDelTopo=False
  1956.   Case #HaiAttivatoIlMenu
  1957.    If MenuHit=0 AND ItemHit=0
  1958.     If SuoniCaricati<32
  1959.      MaxLen PercorsoSuoni$=160
  1960.      MaxLen NomeSuono$=64
  1961.      NomeSuono$=FileRequest$("Load a sound...",PercorsoSuoni$,NomeSuono$)
  1962.      If NomeSuono$<>""
  1963.       StessoSuono.b=False
  1964.       If SuoniCaricati>0
  1965.        For SuonoPrecedente=0 To SuoniCaricati-1
  1966.         If NomeSuono$=Suono(SuonoPrecedente)\Nome Then StessoSuono=True
  1967.        Next SuonoPrecedente
  1968.       EndIf
  1969.       If StessoSuono=False
  1970.        Suono=SuoniCaricati
  1971.        LoadSound Suono,NomeSuono$
  1972.        Suono(Suono)\Nome=NomeSuono$
  1973.        Sound Suono,3
  1974.       EndIf
  1975.      EndIf
  1976.     Else
  1977.      EZRequest "AmySequencer message","You cannot load more sounds","OK"
  1978.     EndIf
  1979.    EndIf
  1980.    If MenuHit=0 AND ItemHit=1
  1981.     If SuoniCaricati>0
  1982.      If SuonoIndicatoDalTopo<SuoniCaricati AND SuonoIndicatoDalTopo>-1
  1983.       Suono=SuonoIndicatoDalTopo
  1984.       Free Sound Suono
  1985.       Suono(Suono)\Nome=""
  1986.       While Suono+1<SuoniCaricati
  1987.        Suono(Suono)\Nome=Suono(Suono+1)\Nome
  1988.        Suono(Suono)\Canale=Suono(Suono+1)\Canale
  1989.        Suono+1
  1990.       Wend
  1991.       Suono(Suono)\Nome=""
  1992.       CanaliAttivati BitClr (Suono(Suono)\Canale-1)
  1993.       Suono(Suono)\Canale=0
  1994.       SuonoIndicatoDalTopo=-1
  1995.      Else
  1996.       EZRequest "AmySequencer message","You must select a sound first","OK"
  1997.      EndIf
  1998.     Else
  1999.      EZRequest "AmySequencer message","You must load a sound first","OK"
  2000.     EndIf
  2001.    EndIf
  2002.    SecondoClicDelTopo=False
  2003.   Case #HaiChiusoLaFinestra
  2004. ;   SuoniAssegnatiAlloStessoCanale.b=False
  2005. ;   For SuonoUno.b=0 To 31
  2006. ;    For SuonoDue.b=0 To 31
  2007. ;     If SuonoUno<>SuonoDue
  2008. ;      If Suono(SuonoUno)\Canale>0 AND Suono(SuonoUno)\Canale=Suono(SuonoDue)\Canale
  2009. ;       SuoniAssegnatiAlloStessoCanale=True
  2010. ;      EndIf
  2011. ;     EndIf
  2012. ;    Next SuonoDue
  2013. ;   Next SuonoUno
  2014. ;   If SuoniAssegnatiAlloStessoCanale=True
  2015. ;    Messaggio$="You have two or more sounds|assigned to the same channel;|please adjust all better!"
  2016. ;    EZRequest "AmySequencer message",Messaggio$,"OK"
  2017. ;    SecondoClicDelTopo=False
  2018. ;   Else
  2019.    EsciDallEditoreSuoni.b=True
  2020. ;   EndIf
  2021.   Case #HaiPremutoUnTasto
  2022.    TastoPremuto$=LCase$(Inkey$)
  2023.    Select TastoPremuto$
  2024.    Case TastoEsc$
  2025.     EsciDallEditoreSuoni=True
  2026.    Case TastoCursoreSu$
  2027.    Case TastoCursoreGiu$
  2028.    End Select
  2029.    SecondoClicDelTopo=False
  2030.   End Select
  2031.  Until EsciDallEditoreSuoni=True
  2032.  CloseWindow #FinestraEditoreSuoni
  2033.  Use Window #FinestraPrincipale
  2034.  WJam #UnColoreConSfondoTrasparente
  2035. End Statement
  2036.  
  2037. ;-----------------------------------------------------
  2038. ;questa procedura cancella a video un evento musicale
  2039. ;this procedure clears on screen a musical event
  2040. ;------------------------------------------------
  2041. Statement CancellaUnEventoMusicale{TipoDiEventoMusicale$,Evento.w,InizioEvento.l,DurataEvento.l,StatoEvento.b}
  2042. SHARED AltezzaInternaFinestraEditoreSequenza
  2043. SHARED AreaVisibileDeiValori
  2044. SHARED LarghezzaInternaFinestraEditoreSequenza
  2045. SHARED ScalaEventiMusicali
  2046. SHARED TipoDiNota()
  2047. SHARED XInizioAreaVisibile
  2048. SHARED YInizioAreaVisibile
  2049.  SelezioneEventoMusicale.b=StatoEvento & #EventoMusicaleSelezionato
  2050.  EventoMusicaleTagliato.b=StatoEvento & #EventoMusicaleTagliato
  2051.  EventoMusicaleCopiato.b=StatoEvento & #EventoMusicaleCopiato
  2052.  Select TipoDiEventoMusicale$
  2053.  Case "Note"
  2054.   NotaVisualizzata.w=(127-Evento-YInizioAreaVisibile)*8
  2055.   If NotaVisualizzata>=0 AND NotaVisualizzata+7<=AltezzaInternaFinestraEditoreSequenza-8-8
  2056.    InizioNota.l=InizioEvento:FineNota.l=InizioNota+DurataEvento-1
  2057.    I.w=16+(InizioNota-XInizioAreaVisibile)/ScalaEventiMusicali
  2058.    F.w=16+(FineNota-XInizioAreaVisibile)/ScalaEventiMusicali
  2059.    If I>=16 AND I<LarghezzaInternaFinestraEditoreSequenza
  2060.     InizioNotaVisibile.b=True
  2061.    Else
  2062.     InizioNotaVisibile=False
  2063.    EndIf
  2064.    If F>=16 AND F<LarghezzaInternaFinestraEditoreSequenza
  2065.     FineNotaVisibile.b=True
  2066.    Else
  2067.     FineNotaVisibile=False
  2068.    EndIf
  2069.    If I<16 AND F>LarghezzaInternaFinestraEditoreSequenza
  2070.     NotaVisibile.b=True
  2071.    Else
  2072.     If InizioNotaVisibile=True OR FineNotaVisibile=True
  2073.      NotaVisibile=True
  2074.     Else
  2075.      NotaVisibile=False
  2076.     EndIf
  2077.    EndIf
  2078.    If NotaVisibile=True
  2079.     X0Nota=Min(Max(I,16),LarghezzaInternaFinestraEditoreSequenza-1)
  2080.     Y0Nota=Min(Max(NotaVisualizzata,0),AltezzaInternaFinestraEditoreSequenza-1-8-8)
  2081.     X1Nota=Min(Max(F,16),LarghezzaInternaFinestraEditoreSequenza-1)
  2082.     Y1Nota=Min(Max(NotaVisualizzata+7,0),AltezzaInternaFinestraEditoreSequenza-1-8-8)
  2083.     If TipoDiNota(Nota)\Diesis=True
  2084.      WBox X0Nota,Y0Nota,X1Nota,Y1Nota,0
  2085.     Else
  2086.      WBox X0Nota,Y0Nota,X1Nota,Y1Nota,3
  2087.     EndIf
  2088.    EndIf
  2089.   EndIf
  2090.  Case "Program"
  2091.   FineProgramma.l=InizioEvento+Len("Program000")*8-1
  2092.   If SelezioneEventoMusicale=#EventoMusicaleSelezionato Then FineProgramma+Len("X")*8
  2093.   If EventoMusicaleTagliato=#EventoMusicaleTagliato Then FineProgramma+Len("Cu")*8
  2094.   If EventoMusicaleCopiato=#EventoMusicaleCopiato Then FineProgramma+Len("Co")*8
  2095.   I=16+(InizioEvento-XInizioAreaVisibile)/ScalaEventiMusicali
  2096.   F=16+(FineProgramma-XInizioAreaVisibile)/ScalaEventiMusicali
  2097.   If I>=16 OR I<LarghezzaInternaFinestraEditoreSequenza OR F>=16 OR F<LarghezzaInternaFinestraEditoreSequenza
  2098.    I=Max(I,16):F=Min(F,LarghezzaInternaFinestraEditoreSequenza-1)
  2099.    Programma.w=AreaVisibileDeiValori*Max(127-Evento+1,0)/127
  2100.    For Linea.b=0 To 7
  2101.     Y=Programma+Linea
  2102.     If TipoDiNota(127-YInizioAreaVisibile-Y/8)\Diesis=True
  2103.      Wline I,Y,FineProgramma,Y,0
  2104.     Else
  2105.      Wline I,Y,FineProgramma,Y,3
  2106.     EndIf
  2107.    Next Linea
  2108.   EndIf
  2109.  Case "Control"
  2110.   FineControllo.l=InizioEvento+Len("Control000")*8-1
  2111.   If SelezioneEventoMusicale=#EventoMusicaleSelezionato Then FineControllo+Len("X")*8
  2112.   If EventoMusicaleTagliato=#EventoMusicaleTagliato Then FineControllo+Len("Cu")*8
  2113.   If EventoMusicaleCopiato=#EventoMusicaleCopiato Then FineControllo+Len("Co")*8
  2114.   I=16+(InizioEvento-XInizioAreaVisibile)/ScalaEventiMusicali
  2115.   F=16+(FineControllo-XInizioAreaVisibile)/ScalaEventiMusicali
  2116.   If I>=16 OR I<LarghezzaInternaFinestraEditoreSequenza OR F>=16 OR F<LarghezzaInternaFinestraEditoreSequenza
  2117.    I=Max(I,16):F=Min(F,LarghezzaInternaFinestraEditoreSequenza-1)
  2118.    Controllo.w=AreaVisibileDeiValori*Max(127-Evento+1,0)/127
  2119.    For Linea.b=0 To 7
  2120.     Y=Controllo+Linea
  2121.     If TipoDiNota(127-YInizioAreaVisibile-Y/8)\Diesis=True
  2122.      Wline I,Y,FineControllo,Y,0
  2123.     Else
  2124.      Wline I,Y,FineControllo,Y,3
  2125.     EndIf
  2126.    Next Linea
  2127.   EndIf
  2128.  Case "PolyAftertouch"
  2129.   FinePressioneMultipla.l=InizioEvento+Len("Poly000")*8-1
  2130.   If SelezioneEventoMusicale=#EventoMusicaleSelezionato Then FinePressioneMultipla+Len("X")*8
  2131.   If EventoMusicaleTagliato=#EventoMusicaleTagliato Then FinePressioneMultipla+Len("Cu")*8
  2132.   If EventoMusicaleCopiato=#EventoMusicaleCopiato Then FinePressioneMultipla+Len("Co")*8
  2133.   I=16+(InizioEvento-XInizioAreaVisibile)/ScalaEventiMusicali
  2134.   F=16+(FinePressioneMultipla-XInizioAreaVisibile)/ScalaEventiMusicali
  2135.   If I>=16 OR I<LarghezzaInternaFinestraEditoreSequenza OR F>=16 OR F<LarghezzaInternaFinestraEditoreSequenza
  2136.    I=Max(I,16):F=Min(F,LarghezzaInternaFinestraEditoreSequenza-1)
  2137.    PressioneMultipla.b=AreaVisibileDeiValori*Max(127-Evento+1,0)/127
  2138.    For Linea.b=0 To 7
  2139.     Y=PressioneMultipla+Linea
  2140.     If TipoDiNota(127-YInizioAreaVisibile-Y/8)\Diesis=True
  2141.      Wline I,Y,FinePressioneMultipla,Y,0
  2142.     Else
  2143.      Wline I,Y,FinePressioneMultipla,Y,3
  2144.     EndIf
  2145.    Next Linea
  2146.   EndIf
  2147.  Case "MonoAftertouch"
  2148.   FinePressioneSingola.l=InizioEvento+Len("Mono000")*8-1
  2149.   If SelezioneEventoMusicale=#EventoMusicaleSelezionato Then FinePressioneSingola+Len("X")*8
  2150.   If EventoMusicaleTagliato=#EventoMusicaleTagliato Then FinePressioneSingola+Len("Cu")*8
  2151.   If EventoMusicaleCopiato=#EventoMusicaleCopiato Then FinePressioneSingola+Len("Co")*8
  2152.   I=16+(InizioEvento-XInizioAreaVisibile)/ScalaEventiMusicali
  2153.   F=16+(FinePressioneSingola-XInizioAreaVisibile)/ScalaEventiMusicali
  2154.   If I>=16 OR I<LarghezzaInternaFinestraEditoreSequenza OR F>=16 OR F<LarghezzaInternaFinestraEditoreSequenza
  2155.    I=Max(I,16):F=Min(F,LarghezzaInternaFinestraEditoreSequenza-1)
  2156.    PressioneSingola.b=AreaVisibileDeiValori*Max(127-Evento+1,0)/127
  2157.    For Linea.b=0 To 7
  2158.     Y=PressioneSingola+Linea
  2159.     If TipoDiNota(127-YInizioAreaVisibile-Y/8)\Diesis=True
  2160.      Wline I,Y,FinePressioneSingola,Y,0
  2161.     Else
  2162.      Wline I,Y,FinePressioneSingola,Y,3
  2163.     EndIf
  2164.    Next Linea
  2165.   EndIf
  2166.  Case "PitchBend"
  2167.   FineCurvaDiPicco.l=InizioEvento+Len("Bend+0000")*8-1
  2168.   If SelezioneEventoMusicale=#EventoMusicaleSelezionato Then FineCurvaDiPicco+Len("X")*8
  2169.   If EventoMusicaleTagliato=#EventoMusicaleTagliato Then FineCurvaDiPicco+Len("Cu")*8
  2170.   If EventoMusicaleCopiato=#EventoMusicaleCopiato Then FineCurvaDiPicco+Len("Co")*8
  2171.   I=16+(InizioEvento-XInizioAreaVisibile)/ScalaEventiMusicali
  2172.   F=16+(FineCurvaDiPicco-XInizioAreaVisibile)/ScalaEventiMusicali
  2173.   If I>=16 OR I<LarghezzaInternaFinestraEditoreSequenza OR F>=16 OR F<LarghezzaInternaFinestraEditoreSequenza
  2174.    I=Max(I,16):F=Min(F,LarghezzaInternaFinestraEditoreSequenza-1)
  2175.    CurvaDiPicco.b=AreaVisibileDeiValori*Max((127-Evento/128+1),0)/127
  2176.    For Linea.b=0 To 7
  2177.     Y=CurvaDiPicco+Linea
  2178.     If TipoDiNota(127-YInizioAreaVisibile-Y/8)\Diesis=True
  2179.      Wline I,Y,FineCurvaDiPicco,Y,0
  2180.     Else
  2181.      Wline I,Y,FineCurvaDiPicco,Y,3
  2182.     EndIf
  2183.    Next Linea
  2184.   EndIf
  2185.  Case "Tempo"
  2186.   FineTempo.l=InizioEvento+Len("Tempo00/00")*8-1
  2187.   If SelezioneEventoMusicale=#EventoMusicaleSelezionato Then FineTempo+Len("X")*8
  2188.   If EventoMusicaleTagliato=#EventoMusicaleTagliato Then FineTempo+Len("Cu")*8
  2189.   If EventoMusicaleCopiato=#EventoMusicaleCopiato Then FineTempo+Len("Co")*8
  2190.   I=16+(InizioEvento-XInizioAreaVisibile)/ScalaEventiMusicali
  2191.   F=16+(FineTempo-XInizioAreaVisibile)/ScalaEventiMusicali
  2192.   If I>=16 OR I<LarghezzaInternaFinestraEditoreSequenza OR F>=16 OR F<LarghezzaInternaFinestraEditoreSequenza
  2193.    I=Max(I,16):F=Min(F,LarghezzaInternaFinestraEditoreSequenza-1)
  2194.    Tempo.w=AreaVisibileDeiValori*Max(127-Evento+1,0)/127
  2195.    For Linea.b=0 To 7
  2196.     Y=Tempo+Linea
  2197.     If TipoDiNota(127-YInizioAreaVisibile-Y/8)\Diesis=True
  2198.      Wline I,Y,FineTempo,Y,0
  2199.     Else
  2200.      Wline I,Y,FineTempo,Y,3
  2201.     EndIf
  2202.    Next Linea
  2203.   EndIf
  2204.  Case "BPM"
  2205.   FineBattutePerMinuto.l=InizioEvento+Len("BPM000")*8-1
  2206.   If SelezioneEventoMusicale=#EventoMusicaleSelezionato Then FineBattutePerMinuto+Len("X")*8
  2207.   If EventoMusicaleTagliato=#EventoMusicaleTagliato Then FineBattutePerMinuto+Len("Cu")*8
  2208.   If EventoMusicaleCopiato=#EventoMusicaleCopiato Then FineBattutePerMinuto+Len("Co")*8
  2209.   I=16+(InizioEvento-XInizioAreaVisibile)/ScalaEventiMusicali
  2210.   F=16+(FineBattutePerMinuto-XInizioAreaVisibile)/ScalaEventiMusicali
  2211.   If I>=16 OR I<LarghezzaInternaFinestraEditoreSequenza OR F>=16 OR F<LarghezzaInternaFinestraEditoreSequenza
  2212.    I=Max(I,16):F=Min(F,LarghezzaInternaFinestraEditoreSequenza-1)
  2213.    BattutePerMinuto.w=AreaVisibileDeiValori*Max(97-Evento/3+1,0)/97
  2214.    For Linea.b=0 To 7
  2215.     Y=BattutePerMinuto+Linea
  2216.     If TipoDiNota(127-YInizioAreaVisibile-Y/8)\Diesis=True
  2217.      Wline I,Y,FineBattutePerMinuto,Y,0
  2218.     Else
  2219.      Wline I,Y,FineBattutePerMinuto,Y,3
  2220.     EndIf
  2221.    Next Linea
  2222.   EndIf
  2223.  End Select
  2224. End Statement
  2225.  
  2226. ;--------------------------------------------
  2227. ;questa procedura disegna un evento musicale
  2228. ;this procedure draws a musical events
  2229. ;--------------------------------------
  2230. Statement DisegnaUnEventoMusicale{TipoDiEvento$,Evento.w,InizioEvento.l,DurataEvento.l,CanaleEvento.b,StatoEvento.b}
  2231. SHARED AltezzaInternaFinestraEditoreSequenza
  2232. SHARED AreaVisibileDeiValori
  2233. SHARED LarghezzaInternaFinestraEditoreSequenza
  2234. SHARED ScalaEventiMusicali
  2235. SHARED XInizioAreaVisibile
  2236. SHARED YInizioAreaVisibile
  2237.  SelezioneEventoMusicale.b=StatoEvento & #EventoMusicaleSelezionato
  2238.  EventoMusicaleTagliato.b=StatoEvento & #EventoMusicaleTagliato
  2239.  EventoMusicaleCopiato.b=StatoEvento & #EventoMusicaleCopiato
  2240.  EventoMusicaleSuonato.b=StatoEvento & #EventoMusicaleSuonato
  2241.  Select TipoDiEvento$
  2242.  Case "Note"
  2243.   NotaVisualizzata.w=(127-Evento-YInizioAreaVisibile)*8
  2244.   If NotaVisualizzata>=0 AND NotaVisualizzata+7<=AltezzaInternaFinestraEditoreSequenza-8-8
  2245.    FineNota.l=InizioEvento+DurataEvento-1
  2246.    I.w=16+(InizioEvento-XInizioAreaVisibile)/ScalaEventiMusicali
  2247.    F.w=16+(FineNota-XInizioAreaVisibile)/ScalaEventiMusicali
  2248.    If I>=16 AND I<LarghezzaInternaFinestraEditoreSequenza
  2249.     InizioNotaVisibile.b=True
  2250.    Else
  2251.     InizioNotaVisibile=False
  2252.    EndIf
  2253.    If F>=16 AND F<LarghezzaInternaFinestraEditoreSequenza
  2254.     FineNotaVisibile.b=True
  2255.    Else
  2256.     FineNotaVisibile=False
  2257.    EndIf
  2258.    If I<16 AND F>LarghezzaInternaFinestraEditoreSequenza
  2259.     NotaVisibile.b=True
  2260.    Else
  2261.     If InizioNotaVisibile=True OR FineNotaVisibile=True
  2262.      NotaVisibile=True
  2263.     Else
  2264.      NotaVisibile=False
  2265.     EndIf
  2266.    EndIf
  2267.    If NotaVisibile=True
  2268.     X0Nota=Min(Max(I,16),LarghezzaInternaFinestraEditoreSequenza-1)
  2269.     Y0Nota=Min(Max(NotaVisualizzata,0),AltezzaInternaFinestraEditoreSequenza-1-8-8)
  2270.     X1Nota=Min(Max(F,16),LarghezzaInternaFinestraEditoreSequenza-1)
  2271.     Y1Nota=Min(Max(NotaVisualizzata+7,0),AltezzaInternaFinestraEditoreSequenza-1-8-8)
  2272.     WBox X0Nota,Y0Nota,X1Nota,Y1Nota,16-CanaleEvento
  2273.     If EventoMusicaleSuonato=0
  2274.      If SelezioneEventoMusicale=#EventoMusicaleSelezionato
  2275.       Wline X0Nota,NotaVisualizzata,X1Nota,NotaVisualizzata+7,CanaleEvento-1
  2276.       Wline X0Nota,NotaVisualizzata+7,X1Nota,NotaVisualizzata,CanaleEvento-1
  2277.      EndIf
  2278.      If SelezioneEventoMusicale=#EventoMusicaleNonSelezionato
  2279.       Wline X0Nota+1,NotaVisualizzata+1,X1Nota-1,NotaVisualizzata+1,CanaleEvento-1
  2280.       Wline X0Nota+1,NotaVisualizzata+6,X1Nota-1,NotaVisualizzata+6,CanaleEvento-1
  2281.      EndIf
  2282.      If SelezioneEventoMusicale=#EventoMusicaleNonSelezionato
  2283.       If InizioNotaVisibile=True
  2284.        Wline I+1,NotaVisualizzata+1,I+1,NotaVisualizzata+6,CanaleEvento-1
  2285.       EndIf
  2286.       If FineNotaVisibile=True
  2287.        Wline F-1,NotaVisualizzata+1,F-1,NotaVisualizzata+6,CanaleEvento-1
  2288.       EndIf
  2289.      EndIf
  2290.      If EventoMusicaleTagliato=#EventoMusicaleTagliato Then Print Left$("Cutted",(F-I+1)/8)
  2291.      If EventoMusicaleCopiato=#EventoMusicaleCopiato Then Print Left$("Copied",(F-I+1)/8)
  2292.     EndIf
  2293.    EndIf
  2294.   EndIf
  2295.  Case "Program"
  2296.   FineProgramma.l=InizioEvento+Len("Program000")*8-1
  2297.   If SelezioneEventoMusicale=#EventoMusicaleSelezionato Then FineProgramma+Len("X")*8
  2298.   If EventoMusicaleTagliato=#EventoMusicaleTagliato Then FineProgramma+Len("Cu")*8
  2299.   If EventoMusicaleCopiato=#EventoMusicaleCopiato Then FineProgramma+Len("Co")*8
  2300.   I=16+(InizioEvento-XInizioAreaVisibile)/ScalaEventiMusicali
  2301.   F=16+FineProgramma-XInizioAreaVisibile
  2302.   If I>=16 OR I<LarghezzaInternaFinestraEditoreSequenza OR F>=16 OR F<LarghezzaInternaFinestraEditoreSequenza
  2303.    If EventoMusicaleSuonato=#EventoMusicaleSuonato
  2304.     WColour 3,16-CanaleEvento
  2305.    Else
  2306.     WColour CanaleEvento-1,16-CanaleEvento
  2307.    EndIf
  2308.    Format "000":Programma$="Program"+Str$(Evento):Format ""
  2309.    If SelezioneEventoMusicale=#EventoMusicaleSelezionato Then Programma$+"X"
  2310.    If EventoMusicaleTagliato=#EventoMusicaleTagliato Then Programma$+"Cu"
  2311.    If EventoMusicaleCopiato=#EventoMusicaleCopiato Then Print Programma$+"Co"
  2312.    If I<0 Then IniziaPrima.b=True
  2313.    If F>LarghezzaInternaFinestraEditoreSequenza-1 Then FinisceDopo.b=True
  2314.    I=Max(I,16)-16:F=Min(F,LarghezzaInternaFinestraEditoreSequenza-1)-16
  2315.    Y.w=AreaVisibileDeiValori*Max(127-Evento+1,0)/127
  2316.    If IniziaPrima=True Then Programma$=Right$(Programma$,(F-I+1)/8)
  2317.    If FinisceDopo=True Then Programma$=Left$(Programma$,(F-I+1)/8)
  2318.    WLocate 16+I,Y:Print Programma$
  2319.   EndIf
  2320.  Case "Control"
  2321.   FineControllo.l=InizioEvento+Len("Control000")*8-1
  2322.   If SelezioneEventoMusicale=#EventoMusicaleSelezionato Then FineControllo+Len("X")*8
  2323.   If EventoMusicaleTagliato=#EventoMusicaleTagliato Then FineControllo+Len("Cu")*8
  2324.   If EventoMusicaleCopiato=#EventoMusicaleCopiato Then FineControllo+Len("Co")*8
  2325.   I=16+(InizioEvento-XInizioAreaVisibile)/ScalaEventiMusicali
  2326.   F=16+FineControllo-XInizioAreaVisibile
  2327.   If I>=16 OR I<LarghezzaInternaFinestraEditoreSequenza OR F>=16 OR F<LarghezzaInternaFinestraEditoreSequenza
  2328.    If EventoMusicaleSuonato=#EventoMusicaleSuonato
  2329.     WColour 3,16-CanaleEvento
  2330.    Else
  2331.     WColour CanaleEvento-1,16-CanaleEvento
  2332.    EndIf
  2333.    Format "000":Controllo$="Control"+Str$(Evento):Format ""
  2334.    If SelezioneEventoMusicale=#EventoMusicaleSelezionato Then Controllo$+"X"
  2335.    If EventoMusicaleTagliato=#EventoMusicaleTagliato Then Controllo$+"Cu"
  2336.    If EventoMusicaleCopiato=#EventoMusicaleCopiato Then Print Controllo$+"Co"
  2337.    If I<0 Then IniziaPrima=True
  2338.    If F>LarghezzaInternaFinestraEditoreSequenza-1 Then FinisceDopo=True
  2339.    I=Max(I,16)-16:F=Min(F,LarghezzaInternaFinestraEditoreSequenza-1)-16
  2340.    Y=AreaVisibileDeiValori*Max(127-Evento+1,0)/127
  2341.    If IniziaPrima=True Then Controllo$=Right$(Controllo$,(F-I+1)/8)
  2342.    If FinisceDopo=True Then Controllo$=Left$(Controllo$,(F-I+1)/8)
  2343.    WLocate 16+I,Y:Print Controllo$
  2344.   EndIf
  2345.  Case "PolyAftertouch"
  2346.   FinePressioneMultipla.l=InizioEvento+Len("Poly000")*8-1
  2347.   If SelezioneEventoMusicale=#EventoMusicaleSelezionato Then FinePressioneMultipla+Len("X")*8
  2348.   If EventoMusicaleTagliato=#EventoMusicaleTagliato Then FinePressioneMultipla+Len("Cu")*8
  2349.   If EventoMusicaleCopiato=#EventoMusicaleCopiato Then FinePressioneMultipla+Len("Co")*8
  2350.   I=16+(InizioEvento-XInizioAreaVisibile)/ScalaEventiMusicali
  2351.   F=16+FinePressioneMultipla-XInizioAreaVisibile
  2352.   If I>=16 OR I<LarghezzaInternaFinestraEditoreSequenza OR F>=16 OR F<LarghezzaInternaFinestraEditoreSequenza
  2353.    If EventoMusicaleSuonato=#EventoMusicaleSuonato
  2354.     WColour 3,16-CanaleEvento
  2355.    Else
  2356.     WColour CanaleEvento-1,16-CanaleEvento
  2357.    EndIf
  2358.    Format "000":PressioneMultipla$="Poly"+Str$(Evento):Format ""
  2359.    If SelezioneEventoMusicale=#EventoMusicaleSelezionato Then PressioneMultipla$+"X"
  2360.    If EventoMusicaleTagliato=#EventoMusicaleTagliato Then PressioneMultipla$+"Cu"
  2361.    If EventoMusicaleCopiato=#EventoMusicaleCopiato Then Print PressioneMultipla$+"Co"
  2362.    If I<0 Then IniziaPrima=True
  2363.    If F>LarghezzaInternaFinestraEditoreSequenza-1 Then FinisceDopo=True
  2364.    I=Max(I,16)-16:F=Min(F,LarghezzaInternaFinestraEditoreSequenza-1)-16
  2365.    Y=AreaVisibileDeiValori*Max(127-Evento+1,0)/127
  2366.    If IniziaPrima=True Then PressioneMultipla$=Right$(PressioneMultipla$,(F-I+1)/8)
  2367.    If FinisceDopo=True Then PressioneMultipla$=Left$(PressioneMultipla$,(F-I+1)/8)
  2368.    WLocate 16+I,Y:Print PressioneMultipla$
  2369.   EndIf
  2370.  Case "MonoAftertouch"
  2371.   FinePressioneSingola.l=InizioEvento+Len("Mono000")*8-1
  2372.   If SelezioneEventoMusicale=#EventoMusicaleSelezionato Then FinePressioneSingola+Len("X")*8
  2373.   If EventoMusicaleTagliato=#EventoMusicaleTagliato Then FinePressioneSingola+Len("Cu")*8
  2374.   If EventoMusicaleCopiato=#EventoMusicaleCopiato Then FinePressioneSingola+Len("Co")*8
  2375.   I=16+(InizioEvento-XInizioAreaVisibile)/ScalaEventiMusicali
  2376.   F=16+FinePressioneSingola-XInizioAreaVisibile
  2377.   If I>=16 OR I<LarghezzaInternaFinestraEditoreSequenza OR F>=16 OR F<LarghezzaInternaFinestraEditoreSequenza
  2378.    If EventoMusicaleSuonato=#EventoMusicaleSuonato
  2379.     WColour 3,16-CanaleEvento
  2380.    Else
  2381.     WColour CanaleEvento-1,16-CanaleEvento
  2382.    EndIf
  2383.    Format "000":PressioneSingola$="Mono"+Str$(Evento):Format ""
  2384.    If SelezioneEventoMusicale=#EventoMusicaleSelezionato Then PressioneSingola$+"X"
  2385.    If EventoMusicaleTagliato=#EventoMusicaleTagliato Then PressioneSingola$+"Cu"
  2386.    If EventoMusicaleCopiato=#EventoMusicaleCopiato Then Print PressioneSingola$+"Co"
  2387.    If I<0 Then IniziaPrima=True
  2388.    If F>LarghezzaInternaFinestraEditoreSequenza-1 Then FinisceDopo=True
  2389.    I=Max(I,16)-16:F=Min(F,LarghezzaInternaFinestraEditoreSequenza-1)-16
  2390.    Y=AreaVisibileDeiValori*Max(127-Evento+1,0)/127
  2391.    If IniziaPrima=True Then PressioneSingola$=Right$(PressioneSingola$,(F-I+1)/8)
  2392.    If FinisceDopo=True Then PressioneSingola$=Left$(PressioneSingola$,(F-I+1)/8)
  2393.    WLocate 16+I,Y:Print PressioneSingola$
  2394.   EndIf
  2395.  Case "PitchBend"
  2396.   FineCurvaDiPicco.l=InizioEvento+Len("Bend+0000")*8-1
  2397.   If SelezioneEventoMusicale=#EventoMusicaleSelezionato Then FineCurvaDiPicco+Len("X")*8
  2398.   If EventoMusicaleTagliato=#EventoMusicaleTagliato Then FineCurvaDiPicco+Len("Cu")*8
  2399.   If EventoMusicaleCopiato=#EventoMusicaleCopiato Then FineCurvaDiPicco+Len("Co")*8
  2400.   I=16+(InizioEvento-XInizioAreaVisibile)/ScalaEventiMusicali
  2401.   F=16+FineCurvaDiPicco-XInizioAreaVisibile
  2402.   If I>=16 OR I<LarghezzaInternaFinestraEditoreSequenza OR F>=16 OR F<LarghezzaInternaFinestraEditoreSequenza
  2403.    If EventoMusicaleSuonato=#EventoMusicaleSuonato
  2404.     WColour 3,16-CanaleEvento
  2405.    Else
  2406.     WColour CanaleEvento-1,16-CanaleEvento
  2407.    EndIf
  2408.    Format "+0000":CurvaDiPicco$="Bend"+Str$(Evento-#_PitchBendCenter):Format ""
  2409.    If SelezioneEventoMusicale=#EventoMusicaleSelezionato Then CurvaDiPicco$+"X"
  2410.    If EventoMusicaleTagliato=#EventoMusicaleTagliato Then CurvaDiPicco$+"Cu"
  2411.    If EventoMusicaleCopiato=#EventoMusicaleCopiato Then CurvaDiPicco$+"Co"
  2412.    If I<0 Then IniziaPrima=True
  2413.    If F>LarghezzaInternaFinestraEditoreSequenza-1 Then FinisceDopo=True
  2414.    I=Max(I,16)-16:F=Min(F,LarghezzaInternaFinestraEditoreSequenza-1)-16
  2415.    Y=AreaVisibileDeiValori*Max(127-Evento+1,0)/127
  2416.    If IniziaPrima=True Then CurvaDiPicco$=Right$(CurvaDiPicco$,(F-I+1)/8)
  2417.    If FinisceDopo=True Then CurvaDiPicco$=Left$(CurvaDiPicco$,(F-I+1)/8)
  2418.    WLocate 16+I,Y:Print CurvaDiPicco$
  2419.   EndIf
  2420.  Case "Tempo"
  2421.   FineTempo.l=InizioEvento+Len("Tempo00/00")*8-1
  2422.   If SelezioneEventoMusicale=#EventoMusicaleSelezionato Then FineTempo+Len("X")*8
  2423.   If EventoMusicaleTagliato=#EventoMusicaleTagliato Then FineTempo+Len("Cu")*8
  2424.   If EventoMusicaleCopiato=#EventoMusicaleCopiato Then FineTempo+Len("Co")*8
  2425.   I=16+(InizioEvento-XInizioAreaVisibile)/ScalaEventiMusicali
  2426.   F=16+FineTempo-XInizioAreaVisibile
  2427.   If I>=16 OR I<LarghezzaInternaFinestraEditoreSequenza OR F>=16 OR F<LarghezzaInternaFinestraEditoreSequenza
  2428.    If EventoMusicaleSuonato=#EventoMusicaleSuonato
  2429.     WColour 3,16-CanaleEvento
  2430.    Else
  2431.     WColour CanaleEvento-1,16-CanaleEvento
  2432.    EndIf
  2433.    Format "00":Tempo$="Tempo"+Str$(Evento MOD 16+1)+"/"+Str$(Evento/16+1):Format ""
  2434.    If SelezioneEventoMusicale=#EventoMusicaleSelezionato Then Tempo$+"X"
  2435.    If EventoMusicaleTagliato=#EventoMusicaleTagliato Then Tempo$+"Cu"
  2436.    If EventoMusicaleCopiato=#EventoMusicaleCopiato Then Tempo$+"Co"
  2437.    If I<0 Then IniziaPrima=True
  2438.    If F>LarghezzaInternaFinestraEditoreSequenza-1 Then FinisceDopo=True
  2439.    I=Max(I,16)-16:F=Min(F,LarghezzaInternaFinestraEditoreSequenza-1)-16
  2440.    Y=AreaVisibileDeiValori*Max(127-Evento+1,0)/127
  2441.    If IniziaPrima=True Then Tempo$=Right$(Tempo$,(F-I+1)/8)
  2442.    If FinisceDopo=True Then Tempo$=Left$(Tempo$,(F-I+1)/8)
  2443.    WLocate 16+I,Y:Print Tempo$
  2444.   EndIf
  2445.  Case "BPM"
  2446.   FineBattutePerMinuto.l=InizioEvento+Len("BPM000")*8-1
  2447.   If SelezioneEventoMusicale=#EventoMusicaleSelezionato Then FineBattutePerMinuto+Len("X")*8
  2448.   If EventoMusicaleTagliato=#EventoMusicaleTagliato Then FineBattutePerMinuto+Len("Cu")*8
  2449.   If EventoMusicaleCopiato=#EventoMusicaleCopiato Then FineBattutePerMinuto+Len("Co")*8
  2450.   I=16+(InizioEvento-XInizioAreaVisibile)/ScalaEventiMusicali
  2451.   F=16+FineBattutePerMinuto-XInizioAreaVisibile
  2452.   If I>=16 OR I<LarghezzaInternaFinestraEditoreSequenza OR F>=16 OR F<LarghezzaInternaFinestraEditoreSequenza
  2453.    If EventoMusicaleSuonato=#EventoMusicaleSuonato
  2454.     WColour 3,16-CanaleEvento
  2455.    Else
  2456.     WColour CanaleEvento-1,16-CanaleEvento
  2457.    EndIf
  2458.    Format "000":BattutePerMinuto$="BPM"+Str$(9+Evento):Format ""
  2459.    If SelezioneEventoMusicale=#EventoMusicaleSelezionato Then BattutePerMinuto$+"X"
  2460.    If EventoMusicaleTagliato=#EventoMusicaleTagliato Then BattutePerMinuto$+"Cu"
  2461.    If EventoMusicaleCopiato=#EventoMusicaleCopiato Then BattutePerMinuto$+"Co"
  2462.    If I<0 Then IniziaPrima=True
  2463.    If F>LarghezzaInternaFinestraEditoreSequenza-1 Then FinisceDopo=True
  2464.    I=Max(I,16)-16:F=Min(F,LarghezzaInternaFinestraEditoreSequenza-1)-16
  2465.    Y=AreaVisibileDeiValori*Max(97-Evento/3+1,0)/97
  2466.    If IniziaPrima=True Then BattutePerMinuto$=Right$(BattutePerMinuto$,(F-I+1)/8)
  2467.    If FinisceDopo=True Then BattutePerMinuto$=Left$(BattutePerMinuto$,(F-I+1)/8)
  2468.    WLocate 16+I,Y:Print BattutePerMinuto$
  2469.   EndIf
  2470.  End Select
  2471. End Statement
  2472.  
  2473. ;-----------------------------------------------------------
  2474. ;questa procedura disegna le note di sfondo con i loro nomi
  2475. ;this procedure draws the notes background with note names
  2476. ;----------------------------------------------------------
  2477. Statement MostraLeNoteDiSfondoConILoroNomi{}
  2478. SHARED AreaInvisibileDelleNote
  2479. SHARED LarghezzaInternaFinestraEditoreSequenza
  2480. SHARED TipoDiNota()
  2481. SHARED YInizioAreaVisibile
  2482.  For Tasto.b=0 To 127-AreaInvisibileDelleNote
  2483.   Nota.b=127-Tasto-YInizioAreaVisibile
  2484.   Y0Nota.w=Tasto*8:Y1Nota.w=Y0Nota+7
  2485.   If TipoDiNota(Nota)\Diesis=True
  2486.    WBox 16,Y0Nota,LarghezzaInternaFinestraEditoreSequenza,Y1Nota,0
  2487.    WColour 3,0
  2488.   Else
  2489.    WBox 16,Y0Nota,LarghezzaInternaFinestraEditoreSequenza,Y1Nota,3
  2490.    WColour 0,3
  2491.   EndIf
  2492.   WLocate 16,Y0Nota
  2493.   Print "Note ",Nota,">"
  2494.   Print TipoDiNota(Nota)\NomeInglese
  2495.   Print "-"
  2496.   Print TipoDiNota(Nota)\NomeItaliano
  2497.   Print TipoDiNota(Nota)\Ottava
  2498.  Next Tasto
  2499. End Statement
  2500.  
  2501. ;-----------------------------------------------
  2502. ;questa procedura mostra i numeri delle battute
  2503. ;this procedure shows the bar numbers
  2504. ;-------------------------------------
  2505. Statement MostraLeBattute{}
  2506. SHARED AreaInvisibileDelleNote
  2507. SHARED Battiti
  2508. SHARED EventoMusicale()
  2509. SHARED LarghezzaInternaFinestraEditoreSequenza
  2510. SHARED Misure
  2511. SHARED ScalaEventiMusicali
  2512. SHARED SequenzaSelezionata
  2513. SHARED TipoDiNota()
  2514. SHARED XInizioAreaVisibile
  2515. SHARED YInizioAreaVisibile
  2516.  Nota.b=127-YInizioAreaVisibile-(127-AreaInvisibileDelleNote)
  2517.  Nota$=Str$(Nota):OttavaNota$=Str$(TipoDiNota(Nota)\Ottava):NomeIngleseNota$=TipoDiNota(Nota)\NomeInglese
  2518.  NomeItalianoNota$=TipoDiNota(Nota)\NomeItaliano
  2519.  LarghezzaTesto.w=Len("Note "+Nota$+">"+NomeIngleseNota$+"-"+NomeItalianoNota$+OttavaNota$+" ")*8
  2520.  FineTempo.l=XInizioAreaVisibile+(LarghezzaInternaFinestraEditoreSequenza-16)*ScalaEventiMusicali
  2521.  If TipoDiNota(Nota)\Diesis=True Then WColour 3,0 Else WColour 0,3
  2522.  Battito.b=1
  2523.  Misura.b=1
  2524.  Tempo.l=0
  2525.  Repeat
  2526.   PushItem EventoMusicale()
  2527.   ResetList EventoMusicale()
  2528.   While NextItem(EventoMusicale())=True
  2529.    If EventoMusicale()\Sequenza=SequenzaSelezionata AND EventoMusicale()\Inizio<=Tempo
  2530.     EventoMusicaleSuonato.b=EventoMusicale()\Stato & #EventoMusicaleSuonato
  2531.     If EventoMusicale()\Tipo="Tempo" AND EventoMusicaleSuonato=0
  2532.      NuoviBattiti.b=EventoMusicale()\Evento MOD 16+1
  2533.      NuoveMisure.b=EventoMusicale()\Evento/16+1
  2534.      If Battito>1
  2535.       Battito=1
  2536.       Misura+1
  2537.      EndIf
  2538.      TempoCambiato=True
  2539.      EventoMusicale()\Stato | #EventoMusicaleSuonato
  2540.     EndIf
  2541.    EndIf
  2542.   Wend
  2543.   PopItem EventoMusicale()
  2544.   XTempo.w=16+(Tempo-XInizioAreaVisibile)/ScalaEventiMusicali
  2545.   If XTempo>16+LarghezzaTesto-1
  2546.    WLocate XTempo,(127-AreaInvisibileDelleNote)*8
  2547.    Print Misura,".",Battito
  2548.    If TempoCambiato=True
  2549.     Tic.w=Tempo MOD (192/(NuoveMisure/4.0))
  2550.    Else
  2551.     Tic=Tempo MOD (192/(Misure/4.0))
  2552.    EndIf
  2553.    If Tic>0 Then Print ".",Tic
  2554.   EndIf
  2555.   Battute.b=Max(ScalaEventiMusicali/4,1)
  2556.   If TempoCambiato=True
  2557.    IncrementoTempo.w=(192*(4.0/NuoveMisure))*Battute
  2558.   Else
  2559.    IncrementoTempo=(192*(4.0/Misure))*Battute
  2560.   EndIf
  2561.   Battito+Battute
  2562.   Tempo+IncrementoTempo
  2563.   If TempoCambiato=True
  2564.    If Battito>NuoviBattiti Then Battito=1:Misura+1
  2565.   Else
  2566.    If Battito>Battiti Then Battito=1:Misura+1
  2567.   EndIf
  2568.  Until Tempo>FineTempo
  2569.  ResetList EventoMusicale()
  2570.  While NextItem(EventoMusicale())=True
  2571.   If EventoMusicale()\Tipo="Tempo"
  2572.    EventoMusicaleSuonato=EventoMusicale()\Stato & #EventoMusicaleSuonato
  2573.    If EventoMusicaleSuonato=#EventoMusicaleSuonato
  2574.     EventoMusicale()\Stato & %11110111
  2575.    EndIf
  2576.   EndIf
  2577.  Wend
  2578. End Statement
  2579.  
  2580. ;--------------------------------------------
  2581. ;questa procedura mostra gli eventi musicali
  2582. ;this procedure shows musical events
  2583. ;------------------------------------
  2584. Statement MostraGliEventiMusicali{}
  2585. SHARED EventoMusicale()
  2586. SHARED MostraEventiMusicaliDelloStessoTipoDaSoli
  2587. SHARED SequenzaSelezionata
  2588. SHARED TipoDiEventoBase$
  2589.  ResetList EventoMusicale()
  2590.  While NextItem(EventoMusicale())=True
  2591.   If EventoMusicale()\Sequenza=SequenzaSelezionata
  2592.    TipoDiEventoMusicale$=EventoMusicale()\Tipo
  2593.    If TipoDiEventoMusicale$=TipoDiEventoBase$ OR MostraEventiMusicaliDelloStessoTipoDaSoli=False
  2594.     InizioEvento.l=EventoMusicale()\Inizio
  2595.     CanaleEvento.b=EventoMusicale()\Canale
  2596.     StatoEvento.b=EventoMusicale()\Stato
  2597.     Select TipoDiEventoMusicale$
  2598.     Case "Note"
  2599.      Nota.b=EventoMusicale()\Evento:DurataNota.l=EventoMusicale()\Durata
  2600.      DisegnaUnEventoMusicale{"Note",Nota,InizioEvento,DurataNota,CanaleEvento,StatoEvento}
  2601.     Case "Program"
  2602.      Programma.b=EventoMusicale()\Evento
  2603.      DisegnaUnEventoMusicale{"Program",Programma,InizioEvento,0,CanaleEvento,StatoEvento}
  2604.     Case "Control"
  2605.      Controllo.b=EventoMusicale()\Evento
  2606.      DisegnaUnEventoMusicale{"Control",Controllo,InizioEvento,0,CanaleEvento,StatoEvento}
  2607.     Case "PolyAftertouch"
  2608.      PressioneMultipla.b=EventoMusicale()\Evento
  2609.      DisegnaUnEventoMusicale{"PolyAftertouch",PressioneMultipla,InizioEvento,0,CanaleEvento,StatoEvento}
  2610.     Case "MonoAftertouch"
  2611.      PressioneSingola.b=EventoMusicale()\Evento
  2612.      DisegnaUnEventoMusicale{"MonoAftertouch",PressioneSingola,InizioEvento,0,CanaleEvento,StatoEvento}
  2613.     Case "PitchBend"
  2614.      CurvaDiPicco.w=EventoMusicale()\Evento*128+EventoMusicale()\Valore
  2615.      DisegnaUnEventoMusicale{"PitchBend",CurvaDiPicco,InizioEvento,0,CanaleEvento,StatoEvento}
  2616.     Case "Tempo"
  2617.      Tempo.b=EventoMusicale()\Evento
  2618.      DisegnaUnEventoMusicale{"Tempo",Tempo,InizioEvento,0,CanaleEvento,StatoEvento}
  2619.     Case "BPM"
  2620.      BattutePerMinuto.w=EventoMusicale()\Evento*3+EventoMusicale()\Valore
  2621.      DisegnaUnEventoMusicale{"BPM",BattutePerMinuto,InizioEvento,0,CanaleEvento,StatoEvento}
  2622.     End Select
  2623.    EndIf
  2624.   EndIf
  2625.  Wend
  2626. End Statement
  2627.  
  2628. Statement MostraIlPuntoDiInserimento{}
  2629. SHARED AltezzaInternaFinestraEditoreSequenza
  2630. SHARED CanaleSelezionato
  2631. SHARED LarghezzaInternaFinestraEditoreSequenza
  2632. SHARED PuntoDiInserimento
  2633. SHARED ScalaEventiMusicali
  2634. SHARED XInizioAreaVisibile
  2635.  I.w=16+(PuntoDiInserimento-XInizioAreaVisibile)/ScalaEventiMusicali
  2636.  If I>=16 AND I+7<LarghezzaInternaFinestraEditoreSequenza
  2637.   If CanaleSelezionato>0
  2638.    ColoreTestoPuntoDiInserimento=CanaleSelezionato-1
  2639.    ColoreSfondoPuntoDiInserimento=16-CanaleSelezionato
  2640.   Else
  2641.    ColoreTestoPuntoDiInserimento=3
  2642.   EndIf
  2643.   WBox I,0,I+7,AltezzaInternaFinestraEditoreSequenza-8-8,ColoreSfondoPuntoDiInserimento
  2644.   TestoPuntoDiInserimento$="Insertion point>"
  2645.   For TestoPuntoDiInserimento.b=0 To 15
  2646.    WLocate I,TestoPuntoDiInserimento*8
  2647.    WColour ColoreTestoPuntoDiInserimento,ColoreSfondoPuntoDiInserimento
  2648.    Print Mid$(TestoPuntoDiInserimento$,TestoPuntoDiInserimento+1,1)
  2649.   Next TestoPuntoDiInserimento
  2650.  EndIf
  2651. End Statement
  2652.  
  2653. ;-----------------------------------------------------
  2654. ;questa procedura mostra gli slider dell'editore note
  2655. ;this procedure shows the notes editor' sliders
  2656. ;-----------------------------------------------
  2657. Statement MostraSliderEditoreSequenza{}
  2658. SHARED AreaInvisibileDelleNote
  2659. SHARED AreaInvisibileDelTempo
  2660. SHARED DurataSequenza
  2661. SHARED LarghezzaInternaFinestraEditoreSequenza
  2662. SHARED ScalaEventiMusicali
  2663. SHARED XInizioAreaVisibile
  2664. SHARED YInizioAreaVisibile
  2665.  MostraSlider{1,YInizioAreaVisibile,AreaInvisibileDelleNote,"VERTICAL",#ListaGadgetEditoreSequenza,#FinestraEditoreSequenza}
  2666.  If AreaInvisibileDelTempo=0
  2667.   Disable #ListaGadgetEditoreSequenza,2
  2668.   XInizioAreaVisibile=0
  2669.  Else
  2670.   Enable #ListaGadgetEditoreSequenza,2
  2671.  EndIf
  2672.  MostraSlider{2,XInizioAreaVisibile,AreaInvisibileDelTempo,"HORIZONTAL",#ListaGadgetEditoreSequenza,#FinestraEditoreSequenza}
  2673. End Statement
  2674.  
  2675. ;---------------------------------------------------------------
  2676. ;questa procedura mostra la scala di visualizzazione delle note
  2677. ;this procedure shows the note scale of notes displaying
  2678. ;--------------------------------------------------------
  2679. Statement MostraLaScalaDegliEventiMusicali{Ritardo.b}
  2680. SHARED AltezzaInternaFinestraEditoreSequenza
  2681. SHARED ColoriOriginali
  2682. SHARED ScalaEventiMusicali
  2683. ; For Scatola.b=0 To 4
  2684. ;  Y0Scatola.w=AltezzaInternaFinestraEditoreSequenza-8-8
  2685. ;  WBox Scatola,Y0Scatola+Scatola,15-Scatola,Y0Scatola+7-Scatola,15-Scatola
  2686. ; Next Scatola
  2687.  Select ScalaEventiMusicali
  2688.  Case 1
  2689.   Ingrandimento.b=1
  2690.  Case 2
  2691.   Ingrandimento=2
  2692.  Case 4
  2693.   Ingrandimento=3
  2694.  Case 8
  2695.   Ingrandimento=4
  2696.  Case 16
  2697.   Ingrandimento=5
  2698.  Case 32
  2699.   Ingrandimento=6
  2700.  Case 64
  2701.   Ingrandimento=7
  2702.  End Select
  2703.  WLocate 0,AltezzaInternaFinestraEditoreSequenza-8-8
  2704.  If ColoriOriginali=True Then WColour 1,0 Else WColour 2,1
  2705.  Print "Z",Ingrandimento
  2706.  If Ritardo=True Then Delay_ 50
  2707.  WLocate 0,AltezzaInternaFinestraEditoreSequenza-8-8
  2708.  Print "+-"
  2709. End Statement
  2710.  
  2711. Statement MostraITastiDaUsare{}
  2712.  MostraITastiDaUsare$="Esc>.........leave the editor|"
  2713.  MostraITastiDaUsare$+"Space>.......insert a rest|"
  2714.  MostraITastiDaUsare$+"|"
  2715.  MostraITastiDaUsare$+"No selected events:|"
  2716.  MostraITastiDaUsare$+"Cursor up>...scroll window up|"
  2717.  MostraITastiDaUsare$+"Cursor down>.scroll window down|"
  2718.  MostraITastiDaUsare$+"Cursor left>.scroll window backward|"
  2719.  MostraITastiDaUsare$+"Cursor right>scroll window forward|"
  2720.  MostraITastiDaUsare$+"Backspace>...delete last event|"
  2721.  MostraITastiDaUsare$+"|"
  2722.  MostraITastiDaUsare$+"No selected plus shift:|"
  2723.  MostraITastiDaUsare$+"Cursor left>.move insertion point backward|"
  2724.  MostraITastiDaUsare$+"Cursor right>move insertion point forward|"
  2725.  MostraITastiDaUsare$+"Backspace>...delete last event"
  2726.  EZRequest "AmySequencer help",MostraITastiDaUsare$,"OK"
  2727.  
  2728.  MostraITastiDaUsare$="With selected events:|"
  2729.  MostraITastiDaUsare$+"Cursor up>...inc sel events/tempo beat|"
  2730.  MostraITastiDaUsare$+"Cursor down>.dec sel events/tempo beat|"
  2731.  MostraITastiDaUsare$+"Cursor left>.move sel events forward|"
  2732.  MostraITastiDaUsare$+"Cursor right>move sel events backward|"
  2733.  MostraITastiDaUsare$+"Backspace>...delete last event|"
  2734.  MostraITastiDaUsare$+"|"
  2735.  MostraITastiDaUsare$+"With selected events plus shift:|"
  2736.  MostraITastiDaUsare$+"Cursor up>...move sel notes up of one octave|"
  2737.  MostraITastiDaUsare$+"             inc sel events of 10|"
  2738.  MostraITastiDaUsare$+"             inc sel tempo events measure|"
  2739.  MostraITastiDaUsare$+"Cursor down>.move sel notes down of one octave|"
  2740.  MostraITastiDaUsare$+"             dec sel events of 10|"
  2741.  MostraITastiDaUsare$+"             dec sel tempo events measure|"
  2742.  MostraITastiDaUsare$+"Cursor left>.stretch sel notes backward|"
  2743.  MostraITastiDaUsare$+"Cursor right>stretch sel notes forward|"
  2744.  MostraITastiDaUsare$+"Backspace>...delete all sel events"
  2745.  EZRequest "AmySequencer help",MostraITastiDaUsare$,"OK"
  2746.  
  2747. End Statement
  2748.  
  2749. Statement MostraLaMappaturaDelleNoteSullaTastiera{}
  2750.  MostraLaMappaturaDelleNoteSullaTastiera$="Note    lo octave hi octave|"
  2751.  MostraLaMappaturaDelleNoteSullaTastiera$+"C--Do  >........Z.........Q|"
  2752.  MostraLaMappaturaDelleNoteSullaTastiera$+"C#-Do# >........S.........2|"
  2753.  MostraLaMappaturaDelleNoteSullaTastiera$+"D--Re  >........X.........W|"
  2754.  MostraLaMappaturaDelleNoteSullaTastiera$+"D#-Re# >........D.........3|"
  2755.  MostraLaMappaturaDelleNoteSullaTastiera$+"E--Mi  >........C.........E|"
  2756.  MostraLaMappaturaDelleNoteSullaTastiera$+"F--Fa  >........V.........R|"
  2757.  MostraLaMappaturaDelleNoteSullaTastiera$+"F#-Fa# >........G.........5|"
  2758.  MostraLaMappaturaDelleNoteSullaTastiera$+"G--Sol >........B.........T|"
  2759.  MostraLaMappaturaDelleNoteSullaTastiera$+"G#-Sol#>........H.........6|"
  2760.  MostraLaMappaturaDelleNoteSullaTastiera$+"A--La  >........N.........Y|"
  2761.  MostraLaMappaturaDelleNoteSullaTastiera$+"A#-La# >........J.........7|"
  2762.  MostraLaMappaturaDelleNoteSullaTastiera$+"B--Si  >........M.........U|"
  2763.  MostraLaMappaturaDelleNoteSullaTastiera$+"|"
  2764.  MostraLaMappaturaDelleNoteSullaTastiera$+"function keys to select octave"
  2765.  EZRequest "AmySequencer help",MostraLaMappaturaDelleNoteSullaTastiera$,"OK"
  2766. End Statement
  2767.  
  2768. Statement ProgressioneEventiMusicaliCurvaDiPicco{InizioProgressione.w,FineProgressione.w}
  2769. SHARED CanaleSelezionato
  2770. SHARED EventiMusicali
  2771. SHARED EventiMusicaliSelezionati
  2772. SHARED EventoMusicale()
  2773. SHARED LarghezzaEventoBase
  2774. SHARED SequenzaSelezionata
  2775. SHARED XInizioAreaVisibile
  2776.  If CanaleSelezionato>0
  2777.   Valori.b=EZRequest("AmySequencer message","How many inner values|for the progression?","1|2|4|8|16|32|64|Cancel")
  2778.   If Valori=0 Then Statement Return
  2779.   Valori=2+2^(Valori-1)
  2780.   Passo.w=(FineProgressione-InizioProgressione)/(Valori-1)
  2781.   LastItem EventoMusicale()
  2782.   For Valore.w=InizioProgressione To FineProgressione Step Passo
  2783.    If AddItem(EventoMusicale())=True
  2784.     EventoMusicale()\Tipo="PitchBend"
  2785.     EventoMusicale()\Evento=Valore/128
  2786.     EventoMusicale()\Inizio=XInizioAreaVisibile+LarghezzaEventoBase/(Valori-1)*Abs(Valore-InizioProgressione)/Passo
  2787.     EventoMusicale()\Canale=CanaleSelezionato
  2788.     EventoMusicale()\Sequenza=SequenzaSelezionata
  2789.     EventoMusicale()\Stato=#EventoMusicaleNonSelezionato
  2790.     EventoMusicale()\Durata=2
  2791.     EventoMusicale()\Valore=Valore MOD 128
  2792.     EventiMusicali+1
  2793.     EventiMusicaliSelezionati+1
  2794.    Else
  2795.     EZRequest "AmySequencer message","You have used all the available events","OK"
  2796.     ProgressioneInterrotta.b=True
  2797.     Pop For:Goto FineCicloForProgressione
  2798.    EndIf
  2799.   Next Valore
  2800. FineCicloForProgressione
  2801.   If ProgressioneInterrotta=False Then EZRequest "AmySequencer message","Progression successfully completed!","OK"
  2802.  Else
  2803.   EZRequest "AmySequencer message","You must select a channel first","OK"
  2804.  EndIf
  2805. End Statement
  2806.  
  2807. ;---------------------------------------------------
  2808. ;questa procedura permette di cambiare la nota base
  2809. ;this procedure permits to change the basic note
  2810. ;------------------------------------------------
  2811. Statement CambiaLEventoBase{}
  2812. SHARED AltezzaFonte
  2813. SHARED ColoriOriginali
  2814. SHARED EventiMusicaliSelezionati
  2815. SHARED EventoMusicale()
  2816. SHARED LarghezzaEventoBase
  2817. SHARED ParlatoAttivato
  2818. SHARED TastoCursoreDestra$
  2819. SHARED TastoCursoreSinistra$
  2820. SHARED TastoEsc$
  2821. SHARED TipoDiEventoBase$
  2822. SHARED ValoreEventoBase
  2823. SHARED XLunSlider
  2824. SHARED YLunSlider
  2825.  TipoFinestra.l=#FinestraMovibile+#GadgetNascondiFinestra+#GadgetChiudiFinestra+#FinestraConMemoriaSfondo+#FinestraAttivata
  2826.  YPosF.w=(AltezzaFonte+3)*2
  2827.  YLunF.w=AltezzaFonte+3+16+8+8+2
  2828.  If TipoDiEventoBase$<>"Program" AND TipoDiEventoBase$<>"PolyAftertouch" AND TipoDiEventoBase$<>"MonoAftertouch"
  2829.   If TipoDiEventoBase$<>"Tempo" AND TipoDiEventoBase$<>"BPM"
  2830.    YLunF+8+8
  2831.   EndIf
  2832.  EndIf
  2833.  If TipoDiEventoBase$="PitchBend" Then YLunF+8+8
  2834.  TitoloFinestra$="Basic event: "+LCase$(TipoDiEventoBase$)
  2835.  Window #FinestraCambioEventoBase,4,YPosF,4+24*10+4,YLunF,TipoFinestra,TitoloFinestra$,-1,-1
  2836.  LarghezzaInternaFinestraCambioEventoBase.w=InnerWidth
  2837.  AltezzaInternaFinestraCambioEventoBase.w=InnerHeight
  2838.  CloseWindow #FinestraCambioEventoBase
  2839.  XLunSlider=LarghezzaInternaFinestraCambioEventoBase
  2840.  YLunSlider=8
  2841.  If TipoDiEventoBase$<>"Program" AND TipoDiEventoBase$<>"PolyAftertouch" AND TipoDiEventoBase$<>"MonoAftertouch"
  2842.   If TipoDiEventoBase$<>"Tempo" AND TipoDiEventoBase$<>"BPM"
  2843.    If TipoDiEventoBase$="PitchBend"
  2844.     ImpostaSlider{1,0,AltezzaInternaFinestraCambioEventoBase-8-8-8-8-8,"HORIZONTAL",0,#ListaGadgetCambioEventoBase}
  2845.     ImpostaSlider{2,0,AltezzaInternaFinestraCambioEventoBase-8-8-8,"HORIZONTAL",0,#ListaGadgetCambioEventoBase}
  2846.     ImpostaSlider{3,0,AltezzaInternaFinestraCambioEventoBase-8,"HORIZONTAL",0,#ListaGadgetCambioEventoBase}
  2847.    Else
  2848.     ImpostaSlider{1,0,AltezzaInternaFinestraCambioEventoBase-8-8-8,"HORIZONTAL",0,#ListaGadgetCambioEventoBase}
  2849.     ImpostaSlider{2,0,AltezzaInternaFinestraCambioEventoBase-8,"HORIZONTAL",0,#ListaGadgetCambioEventoBase}
  2850.    EndIf
  2851.   Else
  2852.    ImpostaSlider{1,0,AltezzaInternaFinestraCambioEventoBase-8,"HORIZONTAL",0,#ListaGadgetCambioEventoBase}
  2853.   EndIf
  2854.  Else
  2855.   ImpostaSlider{1,0,AltezzaInternaFinestraCambioEventoBase-8,"HORIZONTAL",0,#ListaGadgetCambioEventoBase}
  2856.  EndIf
  2857.  Window #FinestraCambioEventoBase,4,YPosF,4+24*10+4,YLunF,TipoFinestra,TitoloFinestra$,-1,-1,#ListaGadgetCambioEventoBase
  2858.  WindowFont #FonteDiCaratteriTopaz8
  2859. ; Zona.b=NewZoneTable(#TabellaZoneCambioEventoBase,9)
  2860. ; If Zona=True Then UseZoneTable #TabellaZoneCambioEventoBase Else Statement Return
  2861. ; UseZoneTable #TabellaZoneEditoreSequenza
  2862.  For Zona.b=0 To 7
  2863.   WBlit Zona,24*Zona,0;:SetZone Zona,24*Zona,0,24*Zona+23,15
  2864.  Next
  2865.  WLocate 24*8+8,4:WColour 1,0:Print "3";:SetZone 8,24*8,0,24*8+23,15
  2866.  WLocate 24*9+8,4:WColour 1,0:Print "5";:SetZone 9,24*9,0,24*9+23,15
  2867.  MostraSlider{1,(LarghezzaEventoBase-2)/2,(192*6-2)/2,"HORIZONTAL",#ListaGadgetCambioEventoBase,#FinestraCambioEventoBase}
  2868.  If TipoDiEventoBase$<>"Program" AND TipoDiEventoBase$<>"PolyAftertouch" AND TipoDiEventoBase$<>"MonoAftertouch"
  2869.   If TipoDiEventoBase$<>"Tempo" AND TipoDiEventoBase$<>"BPM"
  2870.    If TipoDiEventoBase$="PitchBend"
  2871. ;------------------------------------------------------------------------------
  2872. ;questa variabile contiene il valore finale di base dello spostamento di picco
  2873. ; delle note
  2874. ;this variable retains the basic pitch bend final value
  2875. ;-------------------------------------------------------
  2876.     FineCurvaDiPiccoEventoBase.w=#_PitchBendCenter
  2877.  
  2878. ;--------------------------------------------------------------------------------
  2879. ;questa variabile contiene il valore iniziale di base dello spostamento di picco
  2880. ; delle note
  2881. ;this variable retains the basic pitch bend initial value
  2882. ;---------------------------------------------------------
  2883.     InizioCurvaDiPiccoEventoBase.w=#_PitchBendCenter
  2884.  
  2885.     ValoreMassimo.w=16384
  2886.     Valore.w=InizioCurvaDiPiccoEventoBase
  2887.     MostraSlider{2,Valore,ValoreMassimo,"HORIZONTAL",#ListaGadgetCambioEventoBase,#FinestraCambioEventoBase}
  2888.     Valore.w=FineCurvaDiPiccoEventoBase
  2889.     MostraSlider{3,Valore,ValoreMassimo,"HORIZONTAL",#ListaGadgetCambioEventoBase,#FinestraCambioEventoBase}
  2890.    Else
  2891.     MostraSlider{2,ValoreEventoBase,127,"HORIZONTAL",#ListaGadgetCambioEventoBase,#FinestraCambioEventoBase}
  2892.    EndIf
  2893.   EndIf
  2894.  EndIf
  2895.  NuovaLarghezzaEventoBase.w=LarghezzaEventoBase
  2896.  NuovoValoreEventoBase.w=ValoreEventoBase
  2897.  NuovoInizioCurvaDiPiccoEventoBase.w=InizioCurvaDiPiccoEventoBase
  2898.  NuovaFineCurvaDiPiccoEventoBase.w=FineCurvaDiPiccoEventoBase
  2899.  EventoBaseModificato.b=False
  2900.  Repeat
  2901.   If SecondoClicDelTopo.b=False
  2902.    If TipoDiEventoBase$<>"Program" AND TipoDiEventoBase$<>"PolyAftertouch" AND TipoDiEventoBase$<>"MonoAftertouch"
  2903.     If TipoDiEventoBase$<>"Tempo" AND TipoDiEventoBase$<>"BPM"
  2904.      If TipoDiEventoBase$="PitchBend"
  2905.       WLocate 0,AltezzaInternaFinestraCambioEventoBase-8-8-8-8-8-8
  2906.      Else
  2907.       WLocate 0,AltezzaInternaFinestraCambioEventoBase-8-8-8-8
  2908.      EndIf
  2909.     Else
  2910.      WLocate 0,AltezzaInternaFinestraCambioEventoBase-8-8
  2911.     EndIf
  2912.    Else
  2913.     WLocate 0,AltezzaInternaFinestraCambioEventoBase-8-8
  2914.    EndIf
  2915.    If NuovaLarghezzaEventoBase MOD 6=0
  2916.     If ColoriOriginali=True Then WColour 3,2 Else WColour 10,9
  2917.    Else
  2918.     WColour 2,1
  2919.    EndIf
  2920.    Format "0000":Print NuovaLarghezzaEventoBase:Format "":Print SPACE$(21)+"width"
  2921.    If TipoDiEventoBase$<>"Program" AND TipoDiEventoBase$<>"PolyAftertouch" AND TipoDiEventoBase$<>"MonoAftertouch"
  2922.     If TipoDiEventoBase$<>"Tempo" AND TipoDiEventoBase$<>"BPM"
  2923.      If TipoDiEventoBase$="PitchBend"
  2924.       Y.w=AltezzaInternaFinestraCambioEventoBase-8-8-8-8
  2925.       WLocate 0,Y:WColour 1,0:Format "+0000"
  2926.       Print NuovoInizioCurvaDiPiccoEventoBase-#_PitchBendCenter:Format ""
  2927.       Valore$="initial"
  2928.      Else
  2929.       Y=AltezzaInternaFinestraCambioEventoBase-8-8
  2930.       WLocate 0,Y:WColour 1,0:Format "000":Print NuovoValoreEventoBase:Format ""
  2931.       If TipoDiEventoBase$="Note" Then Valore$="velocity"
  2932.       If TipoDiEventoBase$="Control" Then Valore$="value"
  2933.      EndIf
  2934.      WLocate (30-Len(Valore$))*8,Y:Print Valore$
  2935.     EndIf
  2936.    EndIf
  2937.    If TipoDiEventoBase$="PitchBend"
  2938.     Y=AltezzaInternaFinestraCambioEventoBase-8-8
  2939.     WLocate 0,Y:WColour 1,0:Format "+0000"
  2940.     Print NuovaFineCurvaDiPiccoEventoBase-#_PitchBendCenter:Format ""
  2941.     Valore$="final":WLocate (30-Len(Valore$))*8,Y:Print Valore$
  2942.    EndIf
  2943.    SecondoClicDelTopo=True
  2944.   EndIf
  2945.   Repeat
  2946.    If ParlatoAttivato=True AND Parlato$<>"" AND Timer-TempoTrascorso.l>49 Then Speak Parlato$:Parlato$=""
  2947.    EventoFinestraCambioEventoBase.l=Event
  2948.   Until EventoFinestraCambioEventoBase>0
  2949.   Select EventoFinestraCambioEventoBase
  2950.   Case #HaiPremutoUnTastoDelTopo
  2951.    XTopo.w=WMouseX:YTopo.w=WMouseY:TastoDelTopoCliccato.b=MButtons
  2952.    Select TastoDelTopoCliccato
  2953.    Case #TastoSinistroDelTopoPremuto
  2954.     XZonaTopo.b=XTopo/24+1:YZonaTopo.b=YTopo>=0 AND YTopo<16
  2955.     If YZonaTopo=True
  2956.      Select XZonaTopo
  2957.      Case 1
  2958.       NuovaLarghezzaEventoBase=192*4:NotaPuntata.w=0:Terzina.b=0:Cinquina.b=0
  2959.       Parlato$="You have choosen a whole note width"
  2960.      Case 2
  2961.       NuovaLarghezzaEventoBase=192*2:NotaPuntata=0:Terzina=0:Cinquina=0
  2962.       Parlato$="You have choosen a half note width"
  2963.      Case 3
  2964.       NuovaLarghezzaEventoBase=192:NotaPuntata=0:Terzina=0:Cinquina=0
  2965.       Parlato$="You have choosen a quarter note width"
  2966.      Case 4
  2967.       NuovaLarghezzaEventoBase=192/2:NotaPuntata=0:Terzina=0:Cinquina=0
  2968.       Parlato$="You have choosen an eighth note width"
  2969.      Case 5
  2970.       NuovaLarghezzaEventoBase=192/4:NotaPuntata=0:Terzina=0:Cinquina=0
  2971.       Parlato$="You have choosen a sixteenth note width"
  2972.      Case 6
  2973.       NuovaLarghezzaEventoBase=192/8:NotaPuntata=0:Terzina=0:Cinquina=0
  2974.       Parlato$="You have choosen a thirty second note width"
  2975.      Case 7
  2976.       NuovaLarghezzaEventoBase=192/16:NotaPuntata=0:Terzina=0:Cinquina=0
  2977.       Parlato$="You have choosen a sixty fourth note width"
  2978.      Case 8
  2979.       If NotaPuntata=0
  2980.        NotaPuntata=NuovaLarghezzaEventoBase/2
  2981.        NuovaLarghezzaEventoBase+NotaPuntata
  2982.        If Terzina>0
  2983.         Terzina=0
  2984.         Parlato$="You have no more a triplet note width, you have choosen a dotted note width"
  2985.        Else
  2986.         If Cinquina>0
  2987.          Cinquina=0
  2988.          Parlato$="You have no more a quintet note width, you have choosen a dotted note width"
  2989.         Else
  2990.          Parlato$="You have choosen a dotted note width"
  2991.         EndIf
  2992.        EndIf
  2993.       Else
  2994.        NuovaLarghezzaEventoBase/3*2
  2995.        NotaPuntata=0
  2996.        Parlato$="You have no more a dotted note width"
  2997.       EndIf
  2998.      Case 9
  2999.       If Terzina=0 AND NuovaLarghezzaEventoBase>5
  3000.        Terzina=3:NuovaLarghezzaEventoBase/Terzina
  3001.        If NotaPuntata>0
  3002.         NotaPuntata=0
  3003.         Parlato$="You have no more a dotted note width, you have choosen a triplet note width"
  3004.        Else
  3005.         If Cinquina>0
  3006.          Cinquina=0
  3007.          Parlato$="You have no more a quintet note width, you have choosen a triplet note width"
  3008.         Else
  3009.          Parlato$="You have choosen a triplet note width"
  3010.         EndIf
  3011.        EndIf
  3012.       Else
  3013.        NuovaLarghezzaEventoBase*Terzina
  3014.        Terzina=0
  3015.        Parlato$="You have no more a triplet note width"
  3016.       EndIf
  3017.      Case 10
  3018.       If Cinquina=0 AND NuovaLarghezzaEventoBase>9
  3019.        Cinquina=5:NuovaLarghezzaEventoBase/Cinquina
  3020.        If NotaPuntata>0
  3021.         NotaPuntata=0
  3022.         Parlato$="You have no more a dotted note width, you have choosen a quintet note width"
  3023.        Else
  3024.         If Terzina>0
  3025.          Parlato$="You have no more a triplet note width, you have choosen a quintet note width"
  3026.         Else
  3027.          Parlato$="You have choosen a quintet note width"
  3028.         EndIf
  3029.        EndIf
  3030.       Else
  3031.        NuovaLarghezzaEventoBase*Cinquina
  3032.        Cinquina=0
  3033.        Parlato$="You have no more a quintet note width"
  3034.       EndIf
  3035.      End Select
  3036.      If XZonaTopo>0 AND XZonaTopo<11
  3037. MostraSlider{1,(NuovaLarghezzaEventoBase-2)/2,(192*6-2)/2,"HORIZONTAL",#ListaGadgetCambioEventoBase,#FinestraCambioEventoBase}
  3038.       Parlato$+", that are "+Str$(NuovaLarghezzaEventoBase)+" ticks."
  3039.      EndIf
  3040.     EndIf
  3041.     SecondoClicDelTopo=False
  3042.     TempoTrascorso=Timer
  3043.    Case 5
  3044.     SecondoClicDelTopo=True
  3045.    End Select
  3046. ;  Case #HaiPremutoUnGadget
  3047. ;   XLunSlider=LarghezzaInternaFinestraCambioEventoBase
  3048. ;   Select GadgetHit
  3049. ;   Case 1
  3050. ;    NuovaLarghezzaEventoBase=ValoreSlider{1,(192*6-2)/2,XLunSlider,"HORIZONTAL",#ListaGadgetCambioEventoBase}*2+2
  3051. ;    NotaPuntata=0:Terzina=0
  3052. ;    Parlato$="You have choosen a note width of "+Str$(NuovaLarghezzaEventoBase)+" ticks."
  3053. ;   Case 2
  3054. ;    If TipoDiEventoBase$="PitchBend"
  3055. ;     NuovoInizioCurvaDiPiccoEventoBase=ValoreSlider{2,16384,XLunSlider,"HORIZONTAL",#ListaGadgetCambioEventoBase}
  3056. ;    Else
  3057. ;     NuovoValoreEventoBase=ValoreSlider{2,127,XLunSlider,"HORIZONTAL",#ListaGadgetCambioEventoBase}
  3058. ;    EndIf
  3059. ;    If TipoDiEventoBase$="Note" Then Parlato$="You have choosen a note velocity of "+Str$(NuovoValoreEventoBase)+"."
  3060. ;    If TipoDiEventoBase$="Control" Then Parlato$="You have choosen a value of "+Str$(NuovoValoreEventoBase)+"."
  3061. ;    If TipoDiEventoBase$="PitchBend"
  3062. ;    Parlato$="You have choosen a bend inital value of "+Str$(NuovoInizioCurvaDiPiccoEventoBase-#_pitchBendCenter)+"."
  3063. ;    EndIf
  3064. ;   Case 3
  3065. ;    NuovaFineCurvaDiPiccoEventoBase=ValoreSlider{3,16384,XLunSlider,"HORIZONTAL",#ListaGadgetCambioEventoBase}
  3066. ;    Parlato$="You have choosen a bend final value of "+Str$(NuovaFineCurvaDiPiccoEventoBase-#_PitchBendCenter)+"."
  3067. ;   End Select
  3068. ;   SecondoClicDelTopo=False
  3069. ;   TempoTrascorso=Timer
  3070.   Case #HaiRilasciatoUnGadget
  3071.    XLunSlider=LarghezzaInternaFinestraCambioEventoBase
  3072.    Select GadgetHit
  3073.    Case 1
  3074.     NuovaLarghezzaEventoBase=ValoreSlider{1,(192*6-2)/2,XLunSlider,"HORIZONTAL",#ListaGadgetCambioEventoBase}*2+2
  3075.     NotaPuntata=0:Terzina=0
  3076.     Parlato$="You have choosen a note width of "+Str$(NuovaLarghezzaEventoBase)+" ticks."
  3077.    Case 2
  3078.     If TipoDiEventoBase$="PitchBend"
  3079.      NuovoInizioCurvaDiPiccoEventoBase=ValoreSlider{2,16384,XLunSlider,"HORIZONTAL",#ListaGadgetCambioEventoBase}
  3080.     Else
  3081.      NuovoValoreEventoBase=ValoreSlider{2,127,XLunSlider,"HORIZONTAL",#ListaGadgetCambioEventoBase}
  3082.     EndIf
  3083.     If TipoDiEventoBase$="Note" Then Parlato$="You have choosen a note velocity of "+Str$(NuovoValoreEventoBase)+"."
  3084.     If TipoDiEventoBase$="Control" Then Parlato$="You have choosen a value of "+Str$(NuovoValoreEventoBase)+"."
  3085.     If TipoDiEventoBase$="PitchBend"
  3086.      Parlato$="You have choosen a bend initial value of "+Str$(NuovoInizioCurvaDiPiccoEventoBase-#_PitchBendCenter)+"."
  3087.     EndIf
  3088.    Case 3
  3089.     NuovaFineCurvaDiPiccoEventoBase=ValoreSlider{3,16384,XLunSlider,"HORIZONTAL",#ListaGadgetCambioEventoBase}
  3090.     Parlato$="You have choosen a bend final value of "+Str$(NuovaFineCurvaDiPiccoEventoBase-#_PitchBendCenter)+"."
  3091.    End Select
  3092.    SecondoClicDelTopo=False
  3093.    TempoTrascorso=Timer
  3094.   Case #HaiChiusoLaFinestra
  3095.    EsciDalCambioEventoBase=True
  3096.   Case #HaiPremutoUnTasto
  3097.    TastoPremuto$=LCase$(Inkey$)
  3098.    Select TastoPremuto$
  3099.    Case TastoEsc$
  3100.     EsciDalCambioEventoBase=True
  3101.    Case TastoCursoreDestra$
  3102.     If NuovaLarghezzaEventoBase<192*6-2
  3103.      NuovaLarghezzaEventoBase+2:NotaPuntata=0:Terzina=0:Cinquina=0
  3104. MostraSlider{1,(NuovaLarghezzaEventoBase-2)/2,(192*6-2)/2,"HORIZONTAL",#ListaGadgetCambioEventoBase,#FinestraCambioEventoBase}
  3105.      Parlato$="You have choosen a note width of "+Str$(NuovaLarghezzaEventoBase)+" ticks."
  3106.     EndIf
  3107.    Case TastoCursoreSinistra$
  3108.     If NuovaLarghezzaEventoBase>3
  3109.      NuovaLarghezzaEventoBase-2:NotaPuntata=0:Terzina=0:Cinquina=0
  3110. MostraSlider{1,(NuovaLarghezzaEventoBase-2)/2,(192*6-2)/2,"HORIZONTAL",#ListaGadgetCambioEventoBase,#FinestraCambioEventoBase}
  3111.      Parlato$="You have choosen a note width of "+Str$(NuovaLarghezzaEventoBase)+" ticks."
  3112.     EndIf
  3113.    End Select
  3114.    SecondoClicDelTopo=False
  3115.    TempoTrascorso=Timer
  3116.   End Select
  3117.  Until EsciDalCambioEventoBase=True
  3118.  If NuovaLarghezzaEventoBase<>LarghezzaEventoBase Then EventoBaseModificato=True
  3119.  If NuovoValoreEventoBase<>ValoreEventoBase Then EventoBaseModificato=True
  3120.  LarghezzaEventoBase=NuovaLarghezzaEventoBase
  3121.  ValoreEventoBase=NuovoValoreEventoBase
  3122.  If EventiMusicaliSelezionati>0
  3123.   If EventoBaseModificato=True
  3124.    Messaggio$="You have made changes:"
  3125.   Else
  3126.    Messaggio$="You have made no changes:"
  3127.   EndIf
  3128.   Messaggio$+"|Would you apply the current|settings to the selected events?"
  3129.   ApplicaINuoviValoriAgliEventiMusicaliSelezionati.b=EZRequest("AmySequencer message",Messaggio$,"Yes|No")
  3130.   If ApplicaINuoviValoriAgliEventiMusicaliSelezionati=1
  3131.    Select TipoDiEventoBase$
  3132.    Case "Note"
  3133.     AggiustaInizio.b=EZRequest("AmySequencer message","Quantize notes start?","Yes|No")
  3134.     AggiustaDurata.b=EZRequest("AmySequencer message","Quantize notes length?","Yes|No")
  3135.     AggiustaValore.b=EZRequest("AmySequencer message","Change notes velocity?","Yes|No")
  3136.    Case "Program"
  3137.     AggiustaInizio=EZRequest("AmySequencer message","Quantize programs start?","Yes|No")
  3138.    Case "Control"
  3139.     AggiustaInizio=EZRequest("AmySequencer message","Quantize controls start?","Yes|No")
  3140.     AggiustaValore=EZRequest("AmySequencer message","Change controls value?","Yes|No")
  3141.    Case "PolyAftertouch"
  3142.     AggiustaInizio=EZRequest("AmySequencer message","Quantize programs start?","Yes|No")
  3143.    Case "MonoAftertouch"
  3144.     AggiustaInizio=EZRequest("AmySequencer message","Quantize programs start?","Yes|No")
  3145.    Case "PitchBend"
  3146.     AggiustaInizio=EZRequest("AmySequencer message","Quantize pitch bends start?","Yes|No")
  3147.    Case "Tempo"
  3148.     AggiustaInizio=EZRequest("AmySequencer message","Quantize tempo events start?","Yes|No")
  3149.    Case "BPM"
  3150.     AggiustaInizio=EZRequest("AmySequencer message","Quantize BPM events start?","Yes|No")
  3151.    End Select
  3152.    ResetList EventoMusicale()
  3153.    While NextItem(EventoMusicale())=True
  3154.     StatoEventoMusicale.b=EventoMusicale()\Stato
  3155.     SelezioneEventoMusicale.b=StatoEventoMusicale & #EventoMusicaleSelezionato
  3156.     If SelezioneEventoMusicale=#EventoMusicaleSelezionato
  3157.      Select EventoMusicale()\Tipo
  3158.      Case "Note"
  3159.       If AggiustaInizio=1 Then EventoMusicale()\Inizio/LarghezzaEventoBase*LarghezzaEventoBase
  3160.       If AggiustaDurata=1 Then EventoMusicale()\Durata/LarghezzaEventoBase*LarghezzaEventoBase
  3161.       If AggiustaValore=1 Then EventoMusicale()\Valore=ValoreEventoBase
  3162.      Case "Program"
  3163.       If AggiustaInizio=1 Then EventoMusicale()\Inizio/LarghezzaEventoBase*LarghezzaEventoBase
  3164.      Case "PolyAftertouch"
  3165.       If AggiustaInizio=1 Then EventoMusicale()\Inizio/LarghezzaEventoBase*LarghezzaEventoBase
  3166.      Case "MonoAftertouch"
  3167.       If AggiustaInizio=1 Then EventoMusicale()\Inizio/LarghezzaEventoBase*LarghezzaEventoBase
  3168.      Case "Control"
  3169.       If AggiustaInizio=1 Then EventoMusicale()\Inizio/LarghezzaEventoBase*LarghezzaEventoBase
  3170.       If AggiustaValore=1 Then EventoMusicale()\Valore=ValoreEventoBase
  3171.      Case "PitchBend"
  3172.       If AggiustaInizio=1 Then EventoMusicale()\Inizio/LarghezzaEventoBase*LarghezzaEventoBase
  3173.      Case "Tempo"
  3174.       If AggiustaInizio=1 Then EventoMusicale()\Inizio/LarghezzaEventoBase*LarghezzaEventoBase
  3175.      Case "BPM"
  3176.       If AggiustaInizio=1 Then EventoMusicale()\Inizio/LarghezzaEventoBase*LarghezzaEventoBase
  3177.      End Select
  3178.     EndIf
  3179.    Wend
  3180.   EndIf
  3181.  EndIf
  3182.  If NuovoInizioCurvaDiPiccoEventoBase<>InizioCurvaDiPiccoEventoBase Then Progressione.b=True
  3183.  If NuovaFineCurvaDiPiccoEventoBase<>FineCurvaDiPiccoEventoBase Then Progressione=True
  3184.  If Progressione=True
  3185.   ProgressioneEventiMusicaliCurvaDiPicco{NuovoInizioCurvaDiPiccoEventoBase,NuovaFineCurvaDiPiccoEventoBase}
  3186.   InizioCurvaDiPiccoEventoBase=NuovoInizioCurvaDiPiccoEventoBase
  3187.   FineCurvaDiPiccoEventoBase=NuovaFineCurvaDiPiccoEventoBase
  3188.  EndIf
  3189.  
  3190. ;*************************************************************
  3191. ;la seguente linea se attivata da' errore quando non dovrebbe
  3192. ;the following line if avtivated gives an error when it should not do
  3193. ;*********************************************************************
  3194. ; FreeZoneTable(#TabellaZoneCambioEventoBase)
  3195.  
  3196.  CloseWindow #FinestraCambioEventoBase
  3197.  Use Window #FinestraEditoreSequenza
  3198.  
  3199. ;***************************************************
  3200. ;il seguente comando sembra non avere alcun effetto
  3201. ;the following command seems have no effect
  3202. ;*******************************************
  3203. ; UseZoneTable #TabellaZoneEditoreSequenza
  3204.  
  3205. End Statement
  3206.  
  3207. ;---------------------------------------------------------------
  3208. ;this procedure states the selected by mouse event new position
  3209. ;questa procedura mostra la nuova posizione dell'evento selezionato col mouse
  3210. ;-----------------------------------------------------------------------------
  3211. Statement MostraNuovaPosizioneEvento{XEvento.l,YEvento.b}
  3212. SHARED AltezzaInternaFinestraEditoreSequenza
  3213. SHARED AreaVisibileDeiValori
  3214. SHARED EventoMusicale()
  3215. SHARED LarghezzaEventoBase
  3216. SHARED LarghezzaInternaFinestraEditoreSequenza
  3217. SHARED MostraNuovoValore
  3218. SHARED ScalaEventiMusicali
  3219. SHARED TipoDiEventoBase$
  3220. SHARED XInizioAreaVisibile
  3221. SHARED YInizioAreaVisibile
  3222.  X0.w=16+(XEvento-XInizioAreaVisibile)/ScalaEventiMusicali
  3223.  Select TipoDiEventoBase$
  3224.  Case "Note"
  3225.   Y0.w=(127-YInizioAreaVisibile-YEvento)*8
  3226.   X1.w=X0+(LarghezzaEventoBase-1)/ScalaEventiMusicali
  3227.  Case "Program"
  3228.   Y0=AreaVisibileDeiValori*Max((127-YEvento+1),0)/127
  3229.   X1=X0+Len("Program000X")*8-1
  3230.  Case "Control"
  3231.   Y0=AreaVisibileDeiValori*Max((127-YEvento+1),0)/127
  3232.   X1=X0+Len("Control000X")*8-1
  3233.  Case "PolyAftertouch"
  3234.   Y0=AreaVisibileDeiValori*Max((127-YEvento+1),0)/127
  3235.   X1=X0+Len("Poly000X")*8-1
  3236.  Case "MonoAftertouch"
  3237.   Y0=AreaVisibileDeiValori*Max((127-YEvento+1),0)/127
  3238.   X1=X0+Len("Mono000X")*8-1
  3239.  Case "PitchBend"
  3240.   Y0=AreaVisibileDeiValori*Max((127-YEvento+1),0)/127
  3241.   X1=X0+Len("Bend+0000X")*8-1
  3242.  Case "Tempo"
  3243.   Y0=AreaVisibileDeiValori*Max((127-YEvento+1),0)/127
  3244.   X1=X0+Len("Tempo00/00X")*8-1
  3245.  Case "BPM"
  3246.   Y0=AreaVisibileDeiValori*Max((97-YEvento+1),0)/97
  3247.   X1=X0+Len("BPM000X")*8-1
  3248.  End Select
  3249.  Y1.w=Y0+7
  3250.  X0=Min(Max(X0,16),LarghezzaInternaFinestraEditoreSequenza-1)
  3251.  Y0=Min(Max(Y0,0),AltezzaInternaFinestraEditoreSequenza-1-8-8-7)
  3252.  X1=Min(Max(X1,16),LarghezzaInternaFinestraEditoreSequenza-1)
  3253.  Y1=Min(Max(Y1,7),AltezzaInternaFinestraEditoreSequenza-1-8-8)
  3254.  WJam #SecondaVoltaStessoColore
  3255.  If MostraNuovoValore=True
  3256.   WLocate X0,Y0
  3257.   Select TipoDiEventoBase$
  3258.   Case "Note"
  3259.    Wline X0,Y0,X1,Y0,X1,Y1,X0,Y1,X0,Y0,0
  3260.   Case "Program"
  3261.    Format "000":Print "Program",Str$(YEvento),"X":Format ""
  3262.   Case "Control"
  3263.    Format "000":Print "Control",Str$(YEvento),"X":Format ""
  3264.   Case "PolyAftertouch"
  3265.    Format "000":Print "Poly",Str$(YEvento),"X":Format ""
  3266.   Case "MonoAftertouch"
  3267.    Format "000":Print "Mono",Str$(YEvento),"X":Format ""
  3268.   Case "PitchBend"
  3269.    Format "+0000":Print "Bend",Str$(YEvento*128+EventoMusicale()\Valore-#_PitchBendCenter),"X":Format ""
  3270.   Case "Tempo"
  3271.    Format "00":Print "Tempo",Str$(YEvento MOD 16+1),"/",Str$(YEvento/16+1),"X":Format ""
  3272.   Case "BPM"
  3273.    Format "000":Print "BPM",Str$(9+YEvento*3+EventoMusicale()\Valore),"X":Format ""
  3274.   End Select
  3275.  Else
  3276.   Wline X0,Y0,X1,Y0,X1,Y1,X0,Y1,X0,Y0,0
  3277.  EndIf
  3278.  WJam #DueColoriConSfondoPieno
  3279. End Statement
  3280.  
  3281. ;------------------------------------------------------------------------------
  3282. ;questa procedura permette di spostare gli eventi selezionati cliccando con il
  3283. ; mouse su uno di essi
  3284. ;this procedure permits to move the selected events clicking on one of these
  3285. ;----------------------------------------------------------------------------
  3286. Statement MuoviConIlTopoGliEventiMusicaliSelezionati{XPosizioneEvento.l,YPosizioneEvento.b}
  3287. SHARED AltezzaInternaFinestraEditoreSequenza
  3288. SHARED AreaVisibileDeiValori
  3289. SHARED Battiti
  3290. SHARED CanaleSelezionato
  3291. SHARED DurataSequenza
  3292. SHARED EventoMusicale()
  3293. SHARED EventoMusicaleSpostatoConIlTopo
  3294. SHARED LarghezzaEventoBase
  3295. SHARED Misure
  3296. SHARED MostraNuovoValore
  3297. SHARED ScalaEventiMusicali
  3298. SHARED SequenzaSelezionata
  3299. SHARED XInizioAreaVisibile
  3300. SHARED YInizioAreaVisibile
  3301. SHARED YPosizioneNota
  3302.  Repeat
  3303.   NuovaXTopo.w=WMouseX:NuovaYTopo.w=WMouseY:TastoDelTopoPremuto.b=Joyb(0)
  3304.   TipoDiEventoBase$=EventoMusicale()\Tipo
  3305.   InizioEvento.l=EventoMusicale()\Inizio
  3306.   CanaleEvento.b=EventoMusicale()\Canale
  3307.   Select TipoDiEventoBase$
  3308.   Case "Note"
  3309.    XNuovaPosizioneNota.l=(XInizioAreaVisibile+(NuovaXTopo-16)*ScalaEventiMusicali)/LarghezzaEventoBase*LarghezzaEventoBase
  3310.    YNuovaPosizioneNota.b=127-YInizioAreaVisibile-NuovaYTopo/8
  3311.    If XNuovaPosizioneNota<>XPosizioneEvento
  3312.     IncrementoXEventoMusicale.l=XNuovaPosizioneNota-XPosizioneEvento
  3313.     EventoMusicaleSpostatoConIlTopo=True
  3314.    Else
  3315.     IncrementoXEventoMusicale=0
  3316.    EndIf
  3317.    If YNuovaPosizioneNota<>YPosizioneEvento
  3318.     IncrementoYEventoMusicale.b=YNuovaPosizioneNota-YPosizioneEvento
  3319.     EventoMusicaleSpostatoConIlTopo=True
  3320.    Else
  3321.     IncrementoYEventoMusicale=0
  3322.    EndIf
  3323.    If IncrementoXEventoMusicale=0 AND IncrementoYEventoMusicale=0
  3324.     EventoMusicaleSpostatoConIlTopo=False
  3325.    Else
  3326.     Messaggio$="Note>"+Str$(IncrementoYEventoMusicale)
  3327.    EndIf
  3328.   Case "Program"
  3329.    XNuovaPosizioneProgramma.l=(XInizioAreaVisibile+(NuovaXTopo-16)*ScalaEventiMusicali)/LarghezzaEventoBase*LarghezzaEventoBase
  3330.    YNuovaPosizioneProgramma.b=127-NuovaYTopo*127/AreaVisibileDeiValori
  3331.    If YNuovaPosizioneProgramma<0
  3332.     If NuovaYTopo<0 Then YNuovaPosizioneProgramma=127
  3333.     If NuovaYTopo>AreaVisibileDeiValori Then YNuovaPosizioneProgramma=0
  3334.    EndIf
  3335.    If XNuovaPosizioneProgramma<>XPosizioneEvento
  3336.     IncrementoXEventoMusicale=XNuovaPosizioneProgramma-XPosizioneEvento
  3337.     EventoMusicaleSpostatoConIlTopo=True
  3338.    Else
  3339.     IncrementoXEventoMusicale=0
  3340.    EndIf
  3341.    If YNuovaPosizioneProgramma<>YPosizioneEvento
  3342.     IncrementoYEventoMusicale=YNuovaPosizioneProgramma-YPosizioneEvento
  3343.     EventoMusicaleSpostatoConIlTopo=True
  3344.    Else
  3345.     IncrementoYEventoMusicale=0
  3346.    EndIf
  3347.    If IncrementoXEventoMusicale=0 AND IncrementoYEventoMusicale=0
  3348.     EventoMusicaleSpostatoConIlTopo=False
  3349.    Else
  3350.     Messaggio$="Program>"+Str$(IncrementoYEventoMusicale)
  3351.    EndIf
  3352.   Case "Control"
  3353.    XNuovaPosizioneControllo.l=(XInizioAreaVisibile+(NuovaXTopo-16)*ScalaEventiMusicali)/LarghezzaEventoBase*LarghezzaEventoBase
  3354.    YNuovaPosizioneControllo.b=127-NuovaYTopo*127/AreaVisibileDeiValori
  3355.    If YNuovaPosizioneControllo<0
  3356.     If NuovaYTopo<0 Then YNuovaPosizioneControllo=127
  3357.     If NuovaYTopo>AreaVisibileDeiValori Then YNuovaPosizioneControllo=0
  3358.    EndIf
  3359.    If XNuovaPosizioneControllo<>XPosizioneEvento
  3360.     IncrementoXEventoMusicale=XNuovaPosizioneControllo-XPosizioneEvento
  3361.     EventoMusicaleSpostatoConIlTopo=True
  3362.    Else
  3363.     IncrementoXEventoMusicale=0
  3364.    EndIf
  3365.    If YNuovaPosizioneControllo<>YPosizioneEvento
  3366.     IncrementoYEventoMusicale=YNuovaPosizioneControllo-YPosizioneEvento
  3367.     EventoMusicaleSpostatoConIlTopo=True
  3368.    Else
  3369.     IncrementoYEventoMusicale=0
  3370.    EndIf
  3371.    If IncrementoXEventoMusicale=0 AND IncrementoYEventoMusicale=0
  3372.     EventoMusicaleSpostatoConIlTopo=False
  3373.    Else
  3374.     Messaggio$="Control>"+Str$(IncrementoYEventoMusicale)
  3375.    EndIf
  3376.   Case "PolyAftertouch"
  3377.    XNuovaPosizionePressioneMultipla.l=XInizioAreaVisibile+(NuovaXTopo-16)*ScalaEventiMusicali
  3378.    XNuovaPosizionepressioneMultipla/LarghezzaEventoBase*LarghezzaEventoBase
  3379.    YNuovaPosizionePressioneMultipla.b=127-NuovaYTopo*127/AreaVisibileDeiValori
  3380.    If YNuovaPosizionePressioneMultipla<0
  3381.     If NuovaYTopo<0 Then YNuovaPosizionePressioneMultipla=127
  3382.     If NuovaYTopo>AreaVisibileDeiValori Then YNuovaPosizionePressioneMultipla=0
  3383.    EndIf
  3384.    If XNuovaPosizionePressioneMultipla<>XPosizioneEvento
  3385.     IncrementoXEventoMusicale=XNuovaPosizionePressioneMultipla-XPosizioneEvento
  3386.     EventoMusicaleSpostatoConIlTopo=True
  3387.    Else
  3388.     IncrementoXEventoMusicale=0
  3389.    EndIf
  3390.    If YNuovaPosizionePressioneMultipla<>YPosizioneEvento
  3391.     IncrementoYEventoMusicale=YNuovaPosizionePressioneMultipla-YPosizioneEvento
  3392.     EventoMusicaleSpostatoConIlTopo=True
  3393.    Else
  3394.     IncrementoYEventoMusicale=0
  3395.    EndIf
  3396.    If IncrementoXEventoMusicale=0 AND IncrementoYEventoMusicale=0
  3397.     EventoMusicaleSpostatoConIlTopo=False
  3398.    Else
  3399.     Messaggio$="Poly>"+Str$(IncrementoYEventoMusicale)
  3400.    EndIf
  3401.   Case "MonoAftertouch"
  3402.    XNuovaPosizionePressioneSingola.l=XInizioAreaVisibile+(NuovaXTopo-16)*ScalaEventiMusicali
  3403.    XNuovaPosizionePressioneSingola/LarghezzaEventoBase*LarghezzaEventoBase
  3404.    YNuovaPosizionePressioneSingola.b=127-NuovaYTopo*127/AreaVisibileDeiValori
  3405.    If YNuovaPosizionePressioneSingola<0
  3406.     If NuovaYTopo<0 Then YNuovaPosizionePressioneSingola=127
  3407.     If NuovaYTopo>AreaVisibileDeiValori Then YNuovaPosizionePressioneSingola=0
  3408.    EndIf
  3409.    If XNuovaPosizionePressioneSingola<>XPosizioneEvento
  3410.     IncrementoXEventoMusicale=XNuovaPosizionePressioneSingola-XPosizioneEvento
  3411.     EventoMusicaleSpostatoConIlTopo=True
  3412.    Else
  3413.     IncrementoXEventoMusicale=0
  3414.    EndIf
  3415.    If YNuovaPosizionePressioneMultipla<>YPosizioneEvento
  3416.     IncrementoYEventoMusicale=YNuovaPosizionePressioneSingola-YPosizioneEvento
  3417.     EventoMusicaleSpostatoConIlTopo=True
  3418.    Else
  3419.     IncrementoYEventoMusicale=0
  3420.    EndIf
  3421.    If IncrementoXEventoMusicale=0 AND IncrementoYEventoMusicale=0
  3422.     EventoMusicaleSpostatoConIlTopo=False
  3423.    Else
  3424.     Messaggio$="Mono>"+Str$(IncrementoYEventoMusicale)
  3425.    EndIf
  3426.   Case "PitchBend"
  3427.    XNuovaPosizioneCurvaDiPicco.l=XInizioAreaVisibile+(NuovaXTopo-16)*ScalaEventiMusicali
  3428.    XNuovaPosizioneCurvaDiPicco/LarghezzaEventoBase*LarghezzaEventoBase
  3429.    YNuovaPosizioneCurvaDiPicco.b=127-NuovaYTopo*127/AreaVisibileDeiValori
  3430.    If YNuovaPosizioneCurvaDiPicco<0
  3431.     If NuovaYTopo<0 Then YNuovaPosizioneCurvaDiPicco=127
  3432.     If NuovaYTopo>AreaVisibileDeiValori Then YNuovaPosizioneCurvaDiPicco=0
  3433.    EndIf
  3434.    If XNuovaPosizioneCurvaDiPicco<>XPosizioneEvento
  3435.     IncrementoXEventoMusicale=XNuovaPosizioneCurvaDiPicco-XPosizioneEvento
  3436.     EventoMusicaleSpostatoConIlTopo=True
  3437.    Else
  3438.     IncrementoXEventoMusicale=0
  3439.    EndIf
  3440.    If YNuovaPosizioneCurvaDiPicco<>YPosizioneEvento
  3441.     IncrementoYEventoMusicale=YNuovaPosizioneCurvaDiPicco-YPosizioneEvento
  3442.     EventoMusicaleSpostatoConIlTopo=True
  3443.    Else
  3444.     IncrementoYEventoMusicale=0
  3445.    EndIf
  3446.    If IncrementoXEventoMusicale=0 AND IncrementoYEventoMusicale=0
  3447.     EventoMusicaleSpostatoConIlTopo=False
  3448.    Else
  3449.     Messaggio$="Bend>"+Str$(IncrementoYEventoMusicale*128)
  3450.    EndIf
  3451.   Case "Tempo"
  3452.    XNuovaPosizioneTempo.l=XInizioAreaVisibile+(NuovaXTopo-16)*ScalaEventiMusicali
  3453.    XNuovaPosizioneTempo/LarghezzaEventoBase*LarghezzaEventoBase
  3454.    YNuovaPosizioneTempo.b=127-NuovaYTopo*127/AreaVisibileDeiValori
  3455.    If YNuovaPosizioneTempo<0
  3456.     If NuovaYTopo<0 Then YNuovaPosizioneTempo=127
  3457.     If NuovaYTopo>AreaVisibileDeiValori Then YNuovaPosizioneTempo=0
  3458.    EndIf
  3459.    If XNuovaPosizioneTempo<>XPosizioneEvento
  3460.     IncrementoXEventoMusicale=XNuovaPosizioneTempo-XPosizioneEvento
  3461.     EventoMusicaleSpostatoConIlTopo=True
  3462.    Else
  3463.     IncrementoXEventoMusicale=0
  3464.    EndIf
  3465.    If YNuovaPosizioneTempo<>YPosizioneEvento
  3466.     IncrementoYEventoMusicale=YNuovaPosizioneTempo-YPosizioneEvento
  3467.     EventoMusicaleSpostatoConIlTopo=True
  3468.    Else
  3469.     IncrementoYEventoMusicale=0
  3470.    EndIf
  3471.    If IncrementoXEventoMusicale=0 AND IncrementoYEventoMusicale=0
  3472.     EventoMusicaleSpostatoConIlTopo=False
  3473.    Else
  3474.     NuoviBattiti.b=IncrementoYEventoMusicale MOD 16
  3475.     NuoveMisure.b=Abs(IncrementoYEventoMusicale/16)
  3476.     Messaggio$="Tempo>":If Sgn(IncrementoYEventoMusicale)=-1 Then Messaggio$+"-"
  3477.     Messaggio$+Str$(NuoviBattiti)+"/"+Str$(NuoveMisure)
  3478.    EndIf
  3479.   Case "BPM"
  3480.    XNuovaPosizioneBattutePerMinuto.l=XInizioAreaVisibile+(NuovaXTopo-16)*ScalaEventiMusicali
  3481.    XNuovaPosizioneBattutePerMinuto/LarghezzaEventoBase*LarghezzaEventoBase
  3482.    YNuovaPosizioneBattutePerMinuto.b=97-NuovaYTopo*97/AreaVisibileDeiValori
  3483.    If YNuovaPosizioneBattutePerMinuto<0
  3484.  
  3485. ;---------------------------------------------------------------------------
  3486. ;il valore massimo per le battute per minuto e' di 97*3, cioe' 291, piu' il
  3487. ; valore di partenza che e' 10, meno 1 dato che questo e' compreso, fa 300
  3488. ;the maximum value for BPM events is 97*3, that is 291, plus the start value
  3489. ; that is 10, minus 1 seen that this is included, it gives 300
  3490. ;--------------------------------------------------------------
  3491.     If NuovaYTopo<0 Then YNuovaPosizioneBattutePerMinuto=97
  3492.  
  3493. ;----------------------------------------------------------------------------
  3494. ;il valore minimo per le battute per minuto e' di 10, che corrisponde a zero
  3495. ; dato che viene sommato in seguito
  3496. ;the minimum value for BPM events is 10, that correspond to zero seen that it
  3497. ; is added after
  3498. ;----------------
  3499.     If NuovaYTopo>AreaVisibileDeiValori Then YNuovaPosizioneBattutePerMinuto=0
  3500.  
  3501.    EndIf
  3502.    If XNuovaPosizioneBattutePerMinuto<>XPosizioneEvento
  3503.     IncrementoXEventoMusicale=XNuovaPosizioneBattutePerMinuto-XPosizioneEvento
  3504.     EventoMusicaleSpostatoConIlTopo=True
  3505.    Else
  3506.     IncrementoXEventoMusicale=0
  3507.    EndIf
  3508.    If YNuovaPosizioneBattutePerMinuto<>YPosizioneEvento
  3509.     IncrementoYEventoMusicale=YNuovaPosizioneBattutePerMinuto-YPosizioneEvento
  3510.     EventoMusicaleSpostatoConIlTopo=True
  3511.    Else
  3512.     IncrementoYEventoMusicale=0
  3513.    EndIf
  3514.    If IncrementoXEventoMusicale=0 AND IncrementoYEventoMusicale=0
  3515.     EventoMusicaleSpostatoConIlTopo=False
  3516.    Else
  3517.     BattutePerMinuto.w=IncrementoYEventoMusicale*3+EventoMusicale()\Valore
  3518.     Messaggio$="BPM>"+Str$(BattutePerMinuto)
  3519.    EndIf
  3520.   End Select
  3521.   Select TipoDiEventoBase$
  3522.   Case "Note"
  3523.    NuovaXEvento.l=XNuovaPosizioneNota:NuovaYEvento.b=YNuovaPosizioneNota
  3524.   Case "Program"
  3525.    NuovaXEvento=XNuovaPosizioneProgramma:NuovaYEvento=YNuovaPosizioneProgramma
  3526.   Case "Control"
  3527.    NuovaXEvento=XNuovaPosizioneControllo:NuovaYEvento=YNuovaPosizioneControllo
  3528.   Case "PolyAftertouch"
  3529.    NuovaXEvento=XNuovaPosizionePressioneMultipla:NuovaYEvento=YNuovaPosizionePressioneMultipla
  3530.   Case "MonoAftertouch"
  3531.    NuovaXEvento=XNuovaPosizionePressioneSingola:NuovaYEvento=YNuovaPosizionePressioneSingola
  3532.   Case "PitchBend"
  3533.    NuovaXEvento=XNuovaPosizioneCurvaDiPicco:NuovaYEvento=YNuovaPosizioneCurvaDiPicco
  3534.   Case "Tempo"
  3535.    NuovaXEvento=XNuovaPosizioneTempo:NuovaYEvento=YNuovaPosizioneTempo
  3536.   Case "BPM"
  3537.    NuovaXEvento=XNuovaPosizioneBattutePerMinuto:NuovaYEvento=YNuovaPosizioneBattutePerMinuto
  3538.   End Select
  3539.   MostraNuovaPosizioneEvento{NuovaXEvento,NuovaYEvento}
  3540.   If EventoMusicaleSpostatoConIlTopo=False
  3541.    Messaggio$="No change made"
  3542.   EndIf
  3543.   XMessaggio.w=16*16+8*3+8*4+8*6
  3544.   YMessaggio.w=AltezzaInternaFinestraEditoreSequenza-8
  3545.   WLocate XMessaggio,YMessaggio
  3546.   Print SPACE$(80-XMessaggio/8)
  3547.   WLocate XMessaggio,YMessaggio
  3548.   WColour CanaleSelezionato-1,16-CanaleSelezionato
  3549.   Print Messaggio$
  3550.   If EventoMusicaleSpostatoConIlTopo=True
  3551.    Print " pos>":ConvertiIlTempoInBattute{IncrementoXEventoMusicale,Battiti,Misure,False}
  3552.   EndIf
  3553.   VWait
  3554.   MostraNuovaPosizioneEvento{NuovaXEvento,NuovaYEvento}
  3555.  Until TastoDelTopoPremuto<>#TastoSinistroDelTopoPremuto
  3556.  If EventoMusicaleSpostatoConIlTopo=True
  3557.   PushItem EventoMusicale()
  3558.   ResetList EventoMusicale()
  3559.   While NextItem(EventoMusicale())=True
  3560.    If EventoMusicale()\Sequenza=SequenzaSelezionata
  3561.     StatoEventoMusicale.b=EventoMusicale()\Stato
  3562.     SelezioneEventoMusicale.b=StatoEventoMusicale & #EventoMusicaleSelezionato
  3563.     If EventoMusicale()\Tipo=TipoDiEventoBase$ AND SelezioneEventoMusicale=#EventoMusicaleSelezionato
  3564.      EventoMusicale()\Evento+IncrementoYEventoMusicale
  3565.      If TipoDiEventoBase$="BPM"
  3566.       EventoMusicale()\Evento=Min(Max(EventoMusicale()\Evento,0),97)
  3567.       If EventoMusicale()\Evento=97 Then EventoMusicale()\Valore=0
  3568.       If EventoMusicale()\Evento=0 Then EventoMusicale()\Valore=1
  3569.      Else
  3570.       EventoMusicale()\Evento=Min(Max(EventoMusicale()\Evento,0),127)
  3571.      EndIf
  3572.      EventoMusicale()\Inizio+IncrementoXEventoMusicale
  3573.      If EventoMusicale()\Inizio<0 Then EventoMusicale()\Inizio=0
  3574.      DurataSequenza=Max(DurataSequenza,EventoMusicale()\Inizio+Max(EventoMusicale()\Durata,LarghezzaEventoBase))
  3575.     EndIf
  3576.    EndIf
  3577.   Wend
  3578.   PopItem EventoMusicale()
  3579.  EndIf
  3580. End Statement
  3581.  
  3582. ;----------------------------------------
  3583. ;questa procedura suona la nota corrente
  3584. ;this procedure plays the current note
  3585. ;--------------------------------------
  3586. Statement SuonaLaNota{Nota.b,VelocitaNota.b,CanaleNota.b,Modo.b}
  3587. SHARED AltezzaInternaFinestraEditoreSequenza
  3588. SHARED MIDIAttivato
  3589. SHARED NoteSuonate
  3590. SHARED PeriFreq()
  3591. SHARED Suono()
  3592. SHARED VoceSpenta
  3593. SHARED VoceUsata
  3594.  For Suono.b=0 To 31
  3595.   If Suono(Suono)\Canale=CanaleNota Then Pop For:Goto FineCicloForEsecutoreNote
  3596.  Next Suono
  3597. FineCicloForEsecutoreNote
  3598.  If Suono<32
  3599.   If Suono(Suono)\Canale>0
  3600.    Periodo.l=PeriFreq(Nota)\Periodo
  3601.    If Periodo>=#PeriodoMinimo AND Periodo<65536
  3602.     If VoceSpenta>0
  3603.      If VoceSpenta BitTst 0=True Then Voce.b=1:VoceSpenta BitClr 0:Goto SuonaCampione
  3604.      If VoceSpenta BitTst 1=True Then Voce=2:VoceSpenta BitClr 1:Goto SuonaCampione
  3605.      If VoceSpenta BitTst 2=True Then Voce=4:VoceSpenta BitClr 2:Goto SuonaCampione
  3606.      If VoceSpenta BitTst 3=True Then Voce=8:VoceSPenta BitClr 3
  3607.     EndIf
  3608. SuonaCampione
  3609.     SetPeriod Suono,Periodo:Sound Suono,Voce
  3610.     VoceUsata | Voce
  3611.     Messaggio$="Note>"+Str$(Nota)+" frequency>"+Str$(PeriFreq(Nota)\Frequenza)
  3612.     NoteSuonate+1
  3613.    EndIf
  3614.   EndIf
  3615.  Else
  3616.   If MIDIAttivato=True
  3617.    ByteDiStatoMIDI.b=#_NoteOn+(CanaleNota-1)
  3618.    WriteSerial 0,ByteDiStatoMIDI
  3619.    WriteSerial 0,Nota
  3620.    WriteSerial 0,VelocitaNota
  3621.    Messaggio$="Note>"+Str$(Nota)+" vel>"+Str$(VelocitaNota)
  3622.    NoteSuonate+1
  3623.   EndIf
  3624.  EndIf
  3625.  If Modo=#EseguiGliEventiMusicaliDallEditoreSequenza
  3626.   XMessaggio.w=16*16+8*3+8*4+8*6
  3627.   YMessaggio.w=AltezzaInternaFinestraEditoreSequenza-8
  3628.   Messaggio$+SPACE$(80-XMessaggio/8-Len(Messaggio$))
  3629.   WLocate XMessaggio,YMessaggio
  3630.   WColour CanaleNota-1,16-CanaleNota
  3631.   Print Messaggio$
  3632.  EndIf
  3633. End Statement
  3634.  
  3635. ;-----------------------------------------------
  3636. ;questa procedura esegue il cambio di programma
  3637. ;this procedure executes the program change
  3638. ;-------------------------------------------
  3639. Statement EseguiIlCambioDiProgramma{Programma.b,CanaleProgramma.b,Modo.b}
  3640. SHARED AltezzaInternaFinestraEditoreSequenza
  3641. SHARED MIDIAttivato
  3642.  If MIDIAttivato=True
  3643.   ByteDiStatoMIDI.b=#_ProgramChange+(CanaleProgramma-1)
  3644.   WriteSerial 0,ByteDiStatoMIDI
  3645.   WriteSerial 0,Programma
  3646.   If Modo=#EseguiGliEventiMusicaliDallEditoreSequenza
  3647.    XMessaggio.w=16*16+8*3+8*4+8*6
  3648.    YMessaggio.w=AltezzaInternaFinestraEditoreSequenza-8
  3649.    Messaggio$="Program>"+Str$(Programma)
  3650.    Messaggio$+SPACE$(80-XMessaggio/8-Len(Messaggio$))
  3651.    WLocate XMessaggio,YMessaggio
  3652.    WColour CanaleProgramma-1,16-CanaleProgramma
  3653.    Print Messaggio$
  3654.   EndIf
  3655.  EndIf
  3656. End Statement
  3657.  
  3658. ;-----------------------------------------------
  3659. ;questa procedura esegue il cambio di controllo
  3660. ;this procedure executes the control change
  3661. ;-------------------------------------------
  3662. Statement EseguiIlCambioDiControllo{Controllo.b,ValoreControllo,CanaleControllo.b,Modo.b}
  3663. SHARED AltezzaInternaFinestraEditoreSequenza
  3664. SHARED MIDIAttivato
  3665.  If MIDIAttivato=True
  3666.   ByteDiStatoMIDI.b=#_ControlChange+(CanaleControllo-1)
  3667.   WriteSerial 0,ByteDiStatoMIDI
  3668.   WriteSerial 0,Controllo
  3669.   WriteSerial 0,ValoreControllo
  3670.   If Modo=#EseguiGliEventiMusicaliDallEditoreSequenza
  3671.    XMessaggio.w=16*16+8*3+8*4+8*6
  3672.    YMessaggio.w=AltezzaInternaFinestraEditoreSequenza-8
  3673.    Messaggio$="Control>"+Str$(Controllo)+" val>"+Str$(ValoreControllo)
  3674.    Messaggio$+SPACE$(80-XMessaggio/8-Len(Messaggio$))
  3675.    WLocate XMessaggio,YMessaggio
  3676.    WColour CanaleControllo-1,16-CanaleControllo
  3677.    Print Messaggio$
  3678.   EndIf
  3679.  EndIf
  3680. End Statement
  3681.  
  3682. ;----------------------------------------------
  3683. ;questa procedura esegue la pressione multipla
  3684. ;this procedure executes the polyphonic pressure
  3685. ;------------------------------------------------
  3686. Statement EseguiLaPressioneMultipla{PressioneMultipla.b,CanalePressioneMultipla.b,Modo.b}
  3687. SHARED AltezzaInternaFinestraEditoreSequenza
  3688. SHARED MIDIAttivato
  3689.  If MIDIAttivato=True
  3690.   ByteDiStatoMIDI.b=#_PolyphonicKeyPressure+(CanalePressioneMultipla-1)
  3691.   WriteSerial 0,ByteDiStatoMIDI
  3692.   WriteSerial 0,PressioneMultipla
  3693.   If Modo=#EseguiGliEventiMusicaliDallEditoreSequenza
  3694.    XMessaggio.w=16*16+8*3+8*4+8*6
  3695.    YMessaggio.w=AltezzaInternaFinestraEditoreSequenza-8
  3696.    Messaggio$="Poly>"+Str$(PressioneMultipla)
  3697.    Messaggio$+SPACE$(80-XMessaggio/8-Len(Messaggio$))
  3698.    WLocate XMessaggio,YMessaggio
  3699.    WColour CanalePressioneMultipla-1,16-CanalePressioneMultipla
  3700.    Print Messaggio$
  3701.   EndIf
  3702.  EndIf
  3703. End Statement
  3704.  
  3705. ;---------------------------------------------
  3706. ;questa procedura esegue la pressione singola
  3707. ;this procedure executes the single pressure
  3708. ;--------------------------------------------
  3709. Statement EseguiLaPressioneSingola{PressioneSingola.b,CanalePressioneSingola.b,Modo.b}
  3710. SHARED AltezzaInternaFinestraEditoreSequenza
  3711. SHARED MIDIAttivato
  3712.  If MIDIAttivato=True
  3713.   ByteDiStatoMIDI.b=#_ChannelKeyPressure+(CanalePressioneSingola-1)
  3714.   WriteSerial 0,ByteDiStatoMIDI
  3715.   WriteSerial 0,PressioneMultipla
  3716.   If Modo=#EseguiGliEventiMusicaliDallEditoreSequenza
  3717.    XMessaggio.w=16*16+8*3+8*4+8*6
  3718.    YMessaggio.w=AltezzaInternaFinestraEditoreSequenza-8
  3719.    Messaggio$="Mono>"+Str$(PressioneMultipla)
  3720.    Messaggio$+SPACE$(80-XMessaggio/8-Len(Messaggio$))
  3721.    WLocate XMessaggio,YMessaggio
  3722.    WColour CanalePressioneSingola-1,16-CanalePressioneSingola
  3723.    Print Messaggio$
  3724.   EndIf
  3725.  EndIf
  3726. End Statement
  3727.  
  3728. ;-----------------------------------------------
  3729. ;questa procedura esegue la variazione di picco
  3730. ;this procedure executes the pitch bending
  3731. ;------------------------------------------
  3732. Statement EseguiLaCurvaDiPicco{CurvaDiPicco.w,CanaleCurvaDiPicco.b,Modo.b}
  3733. SHARED AltezzaInternaFinestraEditoreSequenza
  3734. SHARED MIDIAttivato
  3735.  If MIDIAttivato=True
  3736.   ByteDiStatoMIDI.b=#_PitchBend+(CanaleCurvaDiPicco-1)
  3737.   WriteSerial 0,ByteDiStatoMIDI
  3738.   WriteSerial 0,CurvaDiPicco MOD 128
  3739.   WriteSerial 0,CurvaDiPicco/128
  3740.   If Modo=#EseguiGliEventiMusicaliDallEditoreSequenza
  3741.    XMessaggio.w=16*16+8*3+8*4+8*6
  3742.    YMessaggio.w=AltezzaInternaFinestraEditoreSequenza-8
  3743.    Messaggio$="Bend>"+Str$(CurvaDiPicco-#_PitchBendCenter)
  3744.    Messaggio$+SPACE$(80-XMessaggio/8-Len(Messaggio$))
  3745.    WLocate XMessaggio,YMessaggio
  3746.    WColour CanaleCurvaDiPicco-1,16-CanaleCurvaDiPicco
  3747.    Print Messaggio$
  3748.   EndIf
  3749.  EndIf
  3750. End Statement
  3751.  
  3752. ;-----------------------------------------------------
  3753. ;questa procedura interrompe la nota suonata corrente
  3754. ;this procedure stops the current played note
  3755. ;---------------------------------------------
  3756. Statement SmettiDiSuonareLaNota{Nota.b,VelocitaNota.b,CanaleNota.b,Modo.b}
  3757. SHARED AltezzaInternaFinestraEditoreSequenza
  3758. SHARED MIDIAttivato
  3759. SHARED NoteSuonate
  3760. SHARED PeriFreq()
  3761. SHARED VoceSpenta
  3762. SHARED VoceUsata
  3763.  If VoceUsata>0
  3764.   If VoceUsata BitTst 0=True Then Voce.b=1:Goto FermaCampione
  3765.   If VoceUsata BitTst 1=True Then Voce=2:Goto FermaCampione
  3766.   If VoceUsata BitTst 2=True Then Voce=4:Goto FermaCampione
  3767.   If VoceUsata BitTst 3=True Then Voce=8
  3768. FermaCampione
  3769.   Quiet Voce
  3770.   VoceSpenta | Voce
  3771.   Messaggio$="Note>"+Str$(Nota)+" frequency>"+Str$(PeriFreq(Nota)\Frequenza)
  3772.   NoteSuonate-1
  3773.  Else
  3774.   If MIDIAttivato=True
  3775.    ByteDiStatoMIDI=#_NoteOff+(CanaleNota-1)
  3776.    WriteSerial 0,ByteDiStatoMIDI
  3777.    WriteSerial 0,Nota
  3778.    WriteSerial 0,VelocitaNota
  3779.    Messaggio$="Note>"+Str$(Nota)+" vel>"+Str$(VelocitaNota)
  3780.    NoteSuonate-1
  3781.   EndIf
  3782.  EndIf
  3783.  If Modo=#EseguiGliEventiMusicaliDallEditoreSequenza
  3784.   XMessaggio.w=16*16+8*3+8*4+8*6
  3785.   YMessaggio.w=AltezzaInternaFinestraEditoreSequenza-8
  3786.   Messaggio$+" stopped"
  3787.   Messaggio$+SPACE$(80-XMessaggio/8-Len(Messaggio$))
  3788.   WLocate XMessaggio,YMessaggio
  3789.   WColour CanaleNota-1,16-CanaleNota
  3790.   Print Messaggio$
  3791.  EndIf
  3792. End Statement
  3793.  
  3794. ;----------------------------------------------------------
  3795. ;questa procedura interrompe l'esecuzione di tutte le note
  3796. ;this procedure stops all notes execution
  3797. ;-----------------------------------------
  3798. Statement InterrompiTutteLeNote{Modo.b}
  3799. SHARED AltezzaInternaFinestraEditoreSequenza
  3800. SHARED MIDIAttivato
  3801.  If MIDIAttivato=True
  3802.   For CanaleNote.b=1 To 16
  3803.    EseguiIlCambioDiControllo{#_AllNotesOff,127,CanaleNota,Modo}
  3804.    EseguiIlCambioDiControllo{#_ResetCtrl,127,CanaleNota,Modo}
  3805.   Next CanaleNote
  3806.  EndIf
  3807.  Quiet %1111
  3808.  If Modo=#EseguiGliEventiMusicaliDallEditoreSequenza
  3809.   XMessaggio.w=16*16+8*3+8*4+8*6
  3810.   YMessaggio.w=AltezzaInternaFinestraEditoreSequenza-8
  3811.   Messaggio$="All notes off"
  3812.   Messaggio$+SPACE$(80-XMessaggio/8-Len(Messaggio$))
  3813.   WLocate XMessaggio,YMessaggio
  3814.   WColour 1,0
  3815.   Print Messaggio$
  3816.  EndIf
  3817. End Statement
  3818.  
  3819. ;-------------------------------------------------------
  3820. ;questa procedura imposta il menu dell'editore sequenza
  3821. ;this procedure sets the sequence editor menu
  3822. ;---------------------------------------------
  3823. Statement ImpostaMenuEditoreSequenza{}
  3824. SHARED MostraEventiMusicaliDelloStessoTipoDaSoli
  3825. SHARED MostraNuovoValore
  3826. SHARED TipoDiEventoBase$
  3827.  
  3828.  Free MenuList #ListaMenuEditoreSequenza
  3829.  
  3830.  MenuTitle #ListaMenuEditoreSequenza,0,"Controls"
  3831.  MenuItem #ListaMenuEditoreSequenza,0,0,0,"Play"
  3832.  MenuItem #ListaMenuEditoreSequenza,0,0,1,"Record"
  3833.  
  3834.  MenuTitle #ListaMenuEditoreSequenza,1,"Event type"
  3835.  Select TipoDiEventoBase$
  3836.  Case "Note"
  3837.   MenuItem #ListaMenuEditoreSequenza,4,1,0,"  Note"
  3838.   MenuItem #ListaMenuEditoreSequenza,2,1,1,"  Program"
  3839.   MenuItem #ListaMenuEditoreSequenza,2,1,2,"  Control"
  3840.   MenuItem #ListaMenuEditoreSequenza,2,1,3,"  PolyPressure"
  3841.   MenuItem #ListaMenuEditoreSequenza,2,1,4,"  MonoPressure"
  3842.   MenuItem #ListaMenuEditoreSequenza,2,1,5,"  PitchBend"
  3843.   MenuItem #ListaMenuEditoreSequenza,2,1,6,"  Tempo"
  3844.   MenuItem #ListaMenuEditoreSequenza,2,1,7,"  BPM"
  3845.  Case "Program"
  3846.   MenuItem #ListaMenuEditoreSequenza,2,1,0,"  Note"
  3847.   MenuItem #ListaMenuEditoreSequenza,4,1,1,"  Program"
  3848.   MenuItem #ListaMenuEditoreSequenza,2,1,2,"  Control"
  3849.   MenuItem #ListaMenuEditoreSequenza,2,1,3,"  PolyPressure"
  3850.   MenuItem #ListaMenuEditoreSequenza,2,1,4,"  MonoPressure"
  3851.   MenuItem #ListaMenuEditoreSequenza,2,1,5,"  PitchBend"
  3852.   MenuItem #ListaMenuEditoreSequenza,2,1,6,"  Tempo"
  3853.   MenuItem #ListaMenuEditoreSequenza,2,1,7,"  BPM"
  3854.  Case "Control"
  3855.   MenuItem #ListaMenuEditoreSequenza,2,1,0,"  Note"
  3856.   MenuItem #ListaMenuEditoreSequenza,2,1,1,"  Program"
  3857.   MenuItem #ListaMenuEditoreSequenza,4,1,2,"  Control"
  3858.   MenuItem #ListaMenuEditoreSequenza,2,1,3,"  PolyPressure"
  3859.   MenuItem #ListaMenuEditoreSequenza,2,1,4,"  MonoPressure"
  3860.   MenuItem #ListaMenuEditoreSequenza,2,1,5,"  PitchBend"
  3861.   MenuItem #ListaMenuEditoreSequenza,2,1,6,"  Tempo"
  3862.   MenuItem #ListaMenuEditoreSequenza,2,1,7,"  BPM"
  3863.  Case "PolyAftertouch"
  3864.   MenuItem #ListaMenuEditoreSequenza,2,1,0,"  Note"
  3865.   MenuItem #ListaMenuEditoreSequenza,2,1,1,"  Program"
  3866.   MenuItem #ListaMenuEditoreSequenza,2,1,2,"  Control"
  3867.   MenuItem #ListaMenuEditoreSequenza,4,1,3,"  PolyPressure"
  3868.   MenuItem #ListaMenuEditoreSequenza,2,1,4,"  MonoPressure"
  3869.   MenuItem #ListaMenuEditoreSequenza,2,1,5,"  PitchBend"
  3870.   MenuItem #ListaMenuEditoreSequenza,2,1,6,"  Tempo"
  3871.   MenuItem #ListaMenuEditoreSequenza,2,1,7,"  BPM"
  3872.  Case "MonoAftertouch"
  3873.   MenuItem #ListaMenuEditoreSequenza,2,1,0,"  Note"
  3874.   MenuItem #ListaMenuEditoreSequenza,2,1,1,"  Program"
  3875.   MenuItem #ListaMenuEditoreSequenza,2,1,2,"  Control"
  3876.   MenuItem #ListaMenuEditoreSequenza,2,1,3,"  PolyPressure"
  3877.   MenuItem #ListaMenuEditoreSequenza,4,1,4,"  MonoPressure"
  3878.   MenuItem #ListaMenuEditoreSequenza,2,1,5,"  PitchBend"
  3879.   MenuItem #ListaMenuEditoreSequenza,2,1,6,"  Tempo"
  3880.   MenuItem #ListaMenuEditoreSequenza,2,1,7,"  BPM"
  3881.  Case "PitchBend"
  3882.   MenuItem #ListaMenuEditoreSequenza,2,1,0,"  Note"
  3883.   MenuItem #ListaMenuEditoreSequenza,2,1,1,"  Program"
  3884.   MenuItem #ListaMenuEditoreSequenza,2,1,2,"  Control"
  3885.   MenuItem #ListaMenuEditoreSequenza,2,1,3,"  PolyPressure"
  3886.   MenuItem #ListaMenuEditoreSequenza,2,1,4,"  MonoPressure"
  3887.   MenuItem #ListaMenuEditoreSequenza,4,1,5,"  PitchBend"
  3888.   MenuItem #ListaMenuEditoreSequenza,2,1,6,"  Tempo"
  3889.   MenuItem #ListaMenuEditoreSequenza,2,1,7,"  BPM"
  3890.  Case "Tempo"
  3891.   MenuItem #ListaMenuEditoreSequenza,2,1,0,"  Note"
  3892.   MenuItem #ListaMenuEditoreSequenza,2,1,1,"  Program"
  3893.   MenuItem #ListaMenuEditoreSequenza,2,1,2,"  Control"
  3894.   MenuItem #ListaMenuEditoreSequenza,2,1,3,"  PolyPressure"
  3895.   MenuItem #ListaMenuEditoreSequenza,2,1,4,"  MonoPressure"
  3896.   MenuItem #ListaMenuEditoreSequenza,2,1,5,"  PitchBend"
  3897.   MenuItem #ListaMenuEditoreSequenza,4,1,6,"  Tempo"
  3898.   MenuItem #ListaMenuEditoreSequenza,2,1,7,"  BPM"
  3899.  Case "BPM"
  3900.   MenuItem #ListaMenuEditoreSequenza,2,1,0,"  Note"
  3901.   MenuItem #ListaMenuEditoreSequenza,2,1,1,"  Program"
  3902.   MenuItem #ListaMenuEditoreSequenza,2,1,2,"  Control"
  3903.   MenuItem #ListaMenuEditoreSequenza,2,1,3,"  PolyPressure"
  3904.   MenuItem #ListaMenuEditoreSequenza,2,1,4,"  MonoPressure"
  3905.   MenuItem #ListaMenuEditoreSequenza,2,1,5,"  PitchBend"
  3906.   MenuItem #ListaMenuEditoreSequenza,2,1,6,"  Tempo"
  3907.   MenuItem #ListaMenuEditoreSequenza,4,1,7,"  BPM"
  3908.  End Select
  3909.  If MostraEventiMusicaliDelloStessoTipoDaSoli=True
  3910.   MenuItem #ListaMenuEditoreSequenza,3,1,8,"  Alone"
  3911.  Else
  3912.   MenuItem #ListaMenuEditoreSequenza,1,1,8,"  Alone"
  3913.  EndIf
  3914.  
  3915.  MenuTitle #ListaMenuEditoreSequenza,2,"Settings"
  3916.  MenuItem #ListaMenuEditoreSequenza,0,2,0,"Basic event"
  3917.  If MostraNuovoValore=True
  3918.   MenuItem #ListaMenuEditoreSequenza,3,2,1,"  Show dragged event value"
  3919.  Else
  3920.   MenuItem #ListaMenuEditoreSequenza,1,2,1,"  Show dragged event value"
  3921.  EndIf
  3922.  
  3923.  MenuTitle #ListaMenuEditoreSequenza,3,"Help"
  3924.  MenuItem #ListaMenuEditoreSequenza,0,3,0,"Keys to use"
  3925.  MenuItem #ListaMenuEditoreSequenza,0,3,1,"Notes on keys"
  3926.  
  3927. ;-------------------------------
  3928. ;attacca il menu' alla finestra
  3929. ;attaches menu to window
  3930. ;------------------------
  3931.  SetMenu #ListaMenuEditoreSequenza
  3932.  
  3933. End Statement
  3934.  
  3935. ;----------------------------------------------
  3936. ;questa procedura modifica gli eventi musicali
  3937. ;this procedure modifies the musical events
  3938. ;-------------------------------------------
  3939. Statement Selezione{Modo.b}
  3940. SHARED AltezzaInternaFinestraEditoreSequenza
  3941. SHARED AreaVisibileDeiValori
  3942. SHARED Battiti
  3943. SHARED CanaleSelezionato
  3944. SHARED ColoriOriginali
  3945. SHARED DurataSequenza
  3946. SHARED EventiMusicali
  3947. SHARED EventiMusicaliSelezionati
  3948. SHARED EventoMusicale()
  3949. SHARED EventoMusicaleSelezionato
  3950. SHARED EventoMusicaleSpostatoConIlTopo
  3951. SHARED LarghezzaInternaFinestraEditoreSequenza
  3952. SHARED LarghezzaEventoBase
  3953. SHARED MIDIAttivato
  3954. SHARED Misure
  3955. SHARED NotaSuonata
  3956. SHARED PeriFreq()
  3957. SHARED ScalaEventiMusicali
  3958. SHARED SequenzaSelezionata
  3959. SHARED Suono()
  3960. SHARED TastoDelTopoCliccato
  3961. SHARED TipoDiEventoBase$
  3962. SHARED ValoreEventoBase
  3963. SHARED XInizioAreaVisibile
  3964. SHARED XTopo
  3965. SHARED YInizioAreaVisibile
  3966. SHARED YTopo
  3967.  ResetList EventoMusicale()
  3968.  StessoEvento.b=%00000
  3969.  XTopo=Min(Max(XTopo,16),LarghezzaInternaFinestraEditoreSequenza-1)
  3970.  While NextItem(EventoMusicale())=True
  3971.   StessoEvento=%00000
  3972.   TipoDiEventoMusicaleSelezionato$=EventoMusicale()\Tipo
  3973.   InizioEvento.l=EventoMusicale()\Inizio
  3974.   CanaleEvento.b=EventoMusicale()\Canale
  3975.   SequenzaEvento.w=EventoMusicale()\Sequenza
  3976.   SelezioneEventoMusicale.b=EventoMusicale()\Stato & #EventoMusicaleSelezionato
  3977.   If Modo=#SelezionaUnEvento
  3978.    Select TipoDiEventoMusicaleSelezionato$
  3979.    Case "Note"
  3980.     YTopo=Min(Max(YTopo,0),AltezzaInternaFinestraEditoreSequenza-1-8-8)
  3981.     Nota.b=EventoMusicale()\Evento
  3982.     DurataNota.l=EventoMusicale()\Durata
  3983.     FineNota.l=InizioEvento+DurataNota-1
  3984.     VelocitaNota.b=EventoMusicale()\Valore
  3985.     XPosizioneNota.w=(XInizioAreaVisibile+(XTopo-16)*ScalaEventiMusicali)/LarghezzaEventoBase*LarghezzaEventoBase
  3986.     YPosizioneNota.b=127-YInizioAreaVisibile-YTopo/8
  3987.     If XPosizioneNota>=InizioEvento Then StessoEvento | %00001
  3988.     If XPosizioneNota<=FineNota Then StessoEvento | %00010
  3989.     If YPosizioneNota=Nota Then StessoEvento | %00100
  3990.     If SequenzaEvento=SequenzaSelezionata Then StessoEvento | %01000
  3991.     If StessoEvento=%01111
  3992.      If CanaleSelezionato<>CanaleEvento
  3993.       If CanaleSelezionato=0
  3994.        CanaleSelezionato=CanaleEvento
  3995.        Format "00"
  3996.        WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  3997.        WColour CanaleSelezionato-1,16-CanaleSelezionato
  3998.        Print Str$(CanaleSelezionato)
  3999.        Format ""
  4000.        StessoEvento | %10000
  4001.       Else
  4002.        AggiungiEvento.b=EZRequest("AmySequencer message","Would you add a new note|with the current channel?","Yes|No")
  4003.        If AggiungiEvento=1
  4004.         CanaleEvento=CanaleSelezionato
  4005.        Else
  4006.         Format "00"
  4007.         WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  4008.         If ColoriOriginali=True
  4009.          WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  4010.         Else
  4011.          WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  4012.         EndIf
  4013.         Print Str$(CanaleSelezionato)
  4014.         CanaleSelezionato=CanaleEvento
  4015.         WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  4016.         WColour CanaleSelezionato-1,16-CanaleSelezionato
  4017.         Print Str$(CanaleSelezionato)
  4018.         Format ""
  4019.         StessoEvento | %10000
  4020.        EndIf
  4021.       EndIf
  4022.      Else
  4023.       TipoDiEventoBase$=TipoDiEventoMusicaleSelezionato$
  4024.       ImpostaMenuEditoreSequenza{}
  4025.       StessoEvento | %10000
  4026.      EndIf
  4027.      If SelezioneEventoMusicale=#EventoMusicaleSelezionato
  4028.       If TastoDelTopoCliccato=#TastoSinistroDelTopoPremuto
  4029.        MuoviConIlTopoGliEventiMusicaliSelezionati{XPosizioneNota,YPosizioneNota}
  4030.       EndIf
  4031.       If EventoMusicaleSpostatoConIlTopo=False
  4032.        EventiMusicaliSelezionati-1
  4033.        EventoMusicale()\Stato & %11111110
  4034.       Else
  4035.        Nota=EventoMusicale()\Evento
  4036.        InizioNota=EventoMusicale()\Inizio
  4037.       EndIf
  4038.      Else
  4039.       NotaPiuLunga.l=DurataNota
  4040.       EventiMusicaliSelezionati+1
  4041.       EventoMusicale()\Stato | #EventoMusicaleSelezionato
  4042.      EndIf
  4043.      NotaSuonata\Evento=Nota,0,CanaleEvento
  4044.      NotaSuonata\Durata=DurataNota,VelocitaNota
  4045.      SuonaLaNota{NotaSuonata\Evento,NotaSuonata\Valore,NotaSuonata\Canale,#EseguiGliEventiMusicaliDallEditoreSequenza}
  4046.      NotaSuonata\Stato=True
  4047.      EventoMusicaleSelezionato=EventoMusicale()\Evento
  4048.      Pop While:Goto FineCicloWhileSelezione
  4049.     EndIf
  4050.    Case "Program"
  4051.     YTopo=Min(Max(YTopo,0),AreaVisibileDeiValori)
  4052.     Programma.b=EventoMusicale()\Evento
  4053.     LunghezzaEvento.w=Len("Program000")*8
  4054.     If SelezioneEventoMusicale=#EventoMusicaleSelezionato Then LunghezzaEvento+Len("X")*8
  4055.     FineProgramma.w=InizioEvento+LunghezzaEvento-1
  4056.     XPosizioneProgramma.w=(XInizioAreaVisibile+(XTopo-16)*ScalaEventiMusicali)/LarghezzaEventoBase*LarghezzaEventoBase
  4057.     YPosizioneProgramma.b=127-YTopo*127/AreaVisibileDeiValori
  4058.     If XPosizioneProgramma>=InizioEvento Then StessoEvento | %00001
  4059.     If XPosizioneProgramma<=FineProgramma Then StessoEvento | %00010
  4060.     If YPosizioneProgramma=Programma Then StessoEvento | %00100
  4061.     If SequenzaEvento=SequenzaSelezionata Then StessoEvento | %01000
  4062.     If StessoEvento=%01111
  4063.      If CanaleSelezionato<>CanaleEvento
  4064.       If CanaleSelezionato=0
  4065.        CanaleSelezionato=CanaleEvento
  4066.        Format "00"
  4067.        WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  4068.        WColour CanaleSelezionato-1,16-CanaleSelezionato
  4069.        Print Str$(CanaleSelezionato)
  4070.        Format ""
  4071.        StessoEvento | %10000
  4072.       Else
  4073.        AggiungiEvento=EZRequest("AmySequencer message","Would you add a new program|with the current channel?","Yes|No")
  4074.        If AggiungiEvento=1
  4075.         CanaleEvento=CanaleSelezionato
  4076.        Else
  4077.         Format "00"
  4078.         WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  4079.         If ColoriOriginali=True
  4080.          WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  4081.         Else
  4082.          WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  4083.         EndIf
  4084.         Print Str$(CanaleSelezionato)
  4085.         CanaleSelezionato=CanaleEvento
  4086.         WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  4087.         WColour CanaleSelezionato-1,16-CanaleSelezionato
  4088.         Print Str$(CanaleSelezionato)
  4089.         Format ""
  4090.         StessoEvento | %10000
  4091.        EndIf
  4092.       EndIf
  4093.      Else
  4094.       TipoDiEventoBase$=TipoDiEventoMusicaleSelezionato$
  4095.       ImpostaMenuEditoreSequenza{}
  4096.       StessoEvento | %10000
  4097.      EndIf
  4098.      If SelezioneEventoMusicale=#EventoMusicaleSelezionato
  4099.       If TastoDelTopoCliccato=#TastoSinistroDelTopoPremuto
  4100.        MuoviConIlTopoGliEventiMusicaliSelezionati{XPosizioneProgramma,YPosizioneProgramma}
  4101.       EndIf
  4102.       If EventoMusicaleSpostatoConIlTopo=False
  4103.        EventiMusicaliSelezionati-1
  4104.        EventoMusicale()\Stato & %11111110
  4105.       EndIf
  4106.      Else
  4107.       EventiMusicaliSelezionati+1
  4108.       EventoMusicale()\Stato | #EventoMusicaleSelezionato
  4109.      EndIf
  4110.      EventoMusicaleSelezionato=EventoMusicale()\Evento
  4111.      Pop While:Goto FineCicloWhileSelezione
  4112.     EndIf
  4113.    Case "Control"
  4114.     YTopo=Min(Max(YTopo,0),AreaVisibileDeiValori)
  4115.     Controllo.b=EventoMusicale()\Evento
  4116.     LunghezzaEvento.w=Len("Control000")*8
  4117.     If SelezioneEventoMusicale=#EventoMusicaleSelezionato Then LunghezzaEvento+Len("X")*8
  4118.     FineControllo.w=InizioEvento+LunghezzaEvento-1
  4119.     XPosizioneControllo.w=(XInizioAreaVisibile+(XTopo-16)*ScalaEventiMusicali)/LarghezzaEventoBase*LarghezzaEventoBase
  4120.     YPosizioneControllo.b=127-YTopo*127/AreaVisibileDeiValori
  4121.     If XPosizioneControllo>=InizioEvento Then StessoEvento | %00001
  4122.     If XPosizioneControllo<=FineControllo Then StessoEvento | %00010
  4123.     If YPosizioneControllo=Controllo Then StessoEvento | %00100
  4124.     If SequenzaEvento=SequenzaSelezionata Then StessoEvento | %01000
  4125.     If StessoEvento=%01111
  4126.      If CanaleSelezionato<>CanaleEvento
  4127.       If CanaleSelezionato=0
  4128.        CanaleSelezionato=CanaleEvento
  4129.        Format "00"
  4130.        WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  4131.        WColour CanaleSelezionato-1,16-CanaleSelezionato
  4132.        Print Str$(CanaleSelezionato)
  4133.        Format ""
  4134.        StessoEvento | %10000
  4135.       Else
  4136.        AggiungiEvento=EZRequest("AmySequencer message","Would you add a new control|with the current channel?","Yes|No")
  4137.        If AggiungiEvento=1
  4138.         CanaleEvento=CanaleSelezionato
  4139.        Else
  4140.         Format "00"
  4141.         WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  4142.         If ColoriOriginali=True
  4143.          WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  4144.         Else
  4145.          WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  4146.         EndIf
  4147.         Print Str$(CanaleSelezionato)
  4148.         CanaleSelezionato=CanaleEvento
  4149.         WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  4150.         WColour CanaleSelezionato-1,16-CanaleSelezionato
  4151.         Print Str$(CanaleSelezionato)
  4152.         Format ""
  4153.         StessoEvento | %10000
  4154.        EndIf
  4155.       EndIf
  4156.      Else
  4157.       TipoDiEventoBase$=TipoDiEventoMusicaleSelezionato$
  4158.       ImpostaMenuEditoreSequenza{}
  4159.       StessoEvento | %10000
  4160.      EndIf
  4161.      If SelezioneEventoMusicale=#EventoMusicaleSelezionato
  4162.       If TastoDelTopoCliccato=#TastoSinistroDelTopoPremuto
  4163.        MuoviConIlTopoGliEventiMusicaliSelezionati{XPosizioneControllo,YPosizioneControllo}
  4164.       EndIf
  4165.       If EventoMusicaleSpostatoConIlTopo=False
  4166.        EventiMusicaliSelezionati-1
  4167.        EventoMusicale()\Stato & %11111110
  4168.       EndIf
  4169.      Else
  4170.       EventiMusicaliSelezionati+1
  4171.       EventoMusicale()\Stato | #EventoMusicaleSelezionato
  4172.      EndIf
  4173.      EventoMusicaleSelezionato=EventoMusicale()\Evento
  4174.      Pop While:Goto FineCicloWhileSelezione
  4175.     EndIf
  4176.    Case "PolyAftertouch"
  4177.     YTopo=Min(Max(YTopo,0),AreaVisibileDeiValori)
  4178.     PressioneMultipla.b=EventoMusicale()\Evento
  4179.     LunghezzaEvento.w=Len("Poly000")*8
  4180.     If SelezioneEventoMusicale=#EventoMusicaleSelezionato Then LunghezzaEvento+Len("X")*8
  4181.     FinePressioneMultipla.w=InizioEvento+LunghezzaEvento-1
  4182.     XPosizionePressioneMultipla.w=(XInizioAreaVisibile+(XTopo-16)*ScalaEventiMusicali)/LarghezzaEventoBase*LarghezzaEventoBase
  4183.     YPosizionePressioneMultipla.b=127-YTopo*127/AreaVisibileDeiValori
  4184.     If XPosizionePressioneMultipla>=InizioEvento Then StessoEvento | %00001
  4185.     If XPosizionePressioneMultipla<=FinePressioneMultipla Then StessoEvento | %00010
  4186.     If YPosizionePressioneMultipla=PressioneMultipla Then StessoEvento | %00100
  4187.     If SequenzaEvento=SequenzaSelezionata Then StessoEvento | %01000
  4188.     If StessoEvento=%01111
  4189.      If CanaleSelezionato<>CanaleEvento
  4190.       If CanaleSelezionato=0
  4191.        CanaleSelezionato=CanaleEvento
  4192.        Format "00"
  4193.        WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  4194.        WColour CanaleSelezionato-1,16-CanaleSelezionato
  4195.        Print Str$(CanaleSelezionato)
  4196.        Format ""
  4197.        StessoEvento | %10000
  4198.       Else
  4199.        AggiungiEvento=EZRequest("AmySequencer message","Would you add a new poly|pressure with the current channel?","Yes|No")
  4200.        If AggiungiEvento=1
  4201.         CanaleEvento=CanaleSelezionato
  4202.        Else
  4203.         Format "00"
  4204.         WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  4205.         If ColoriOriginali=True
  4206.          WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  4207.         Else
  4208.          WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  4209.         EndIf
  4210.         Print Str$(CanaleSelezionato)
  4211.         CanaleSelezionato=CanaleEvento
  4212.         WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  4213.         WColour CanaleSelezionato-1,16-CanaleSelezionato
  4214.         Print Str$(CanaleSelezionato)
  4215.         Format ""
  4216.         StessoEvento | %10000
  4217.        EndIf
  4218.       EndIf
  4219.      Else
  4220.       TipoDiEventoBase$=TipoDiEventoMusicaleSelezionato$
  4221.       ImpostaMenuEditoreSequenza{}
  4222.       StessoEvento | %10000
  4223.      EndIf
  4224.      If SelezioneEventoMusicale=#EventoMusicaleSelezionato
  4225.       If TastoDelTopoCliccato=#TastoSinistroDelTopoPremuto
  4226.        MuoviConIlTopoGliEventiMusicaliSelezionati{XPosizionePressioneMultipla,YPosizionePressioneMultipla}
  4227.       EndIf
  4228.       If EventoMusicaleSpostatoConIlTopo=False
  4229.        EventiMusicaliSelezionati-1
  4230.        EventoMusicale()\Stato & %11111110
  4231.       EndIf
  4232.      Else
  4233.       EventiMusicaliSelezionati+1
  4234.       EventoMusicale()\Stato | #EventoMusicaleSelezionato
  4235.      EndIf
  4236.      EventoMusicaleSelezionato=EventoMusicale()\Evento
  4237.      Pop While:Goto FineCicloWhileSelezione
  4238.     EndIf
  4239.    Case "MonoAftertouch"
  4240.     YTopo=Min(Max(YTopo,0),AreaVisibileDeiValori)
  4241.     PressioneSingola.b=EventoMusicale()\Evento
  4242.     LunghezzaEvento.w=Len("Mono000")*8
  4243.     If SelezioneEventoMusicale=#EventoMusicaleSelezionato Then LunghezzaEvento+Len("X")*8
  4244.     FinePressioneSingola.w=InizioEvento+LunghezzaEvento-1
  4245.     XPosizionePressioneSingola.w=(XInizioAreaVisibile+(XTopo-16)*ScalaEventiMusicali)/LarghezzaEventoBase*LarghezzaEventoBase
  4246.     YPosizionePressioneSingola.b=127-YTopo*127/AreaVisibileDeiValori
  4247.     If XPosizionePressioneSingola>=InizioEvento Then StessoEvento | %00001
  4248.     If XPosizionePressioneSingola<=FinePressioneSingola Then StessoEvento | %00010
  4249.     If YPosizionePressioneSingola=PressioneSingola Then StessoEvento | %00100
  4250.     If SequenzaEvento=SequenzaSelezionata Then StessoEvento | %01000
  4251.     If StessoEvento=%01111
  4252.      If CanaleSelezionato<>CanaleEvento
  4253.       If CanaleSelezionato=0
  4254.        CanaleSelezionato=CanaleEvento
  4255.        Format "00"
  4256.        WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  4257.        WColour CanaleSelezionato-1,16-CanaleSelezionato
  4258.        Print Str$(CanaleSelezionato)
  4259.        Format ""
  4260.        StessoEvento | %10000
  4261.       Else
  4262.        AggiungiEvento=EZRequest("AmySequencer message","Would you add a new mono|pressure with the current channel?","Yes|No")
  4263.        If AggiungiEvento=1
  4264.         CanaleEvento=CanaleSelezionato
  4265.        Else
  4266.         Format "00"
  4267.         WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  4268.         If ColoriOriginali=True
  4269.          WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  4270.         Else
  4271.          WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  4272.         EndIf
  4273.         Print Str$(CanaleSelezionato)
  4274.         CanaleSelezionato=CanaleEvento
  4275.         WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  4276.         WColour CanaleSelezionato-1,16-CanaleSelezionato
  4277.         Print Str$(CanaleSelezionato)
  4278.         Format ""
  4279.         StessoEvento | %10000
  4280.        EndIf
  4281.       EndIf
  4282.      Else
  4283.       TipoDiEventoBase$=TipoDiEventoMusicaleSelezionato$
  4284.       ImpostaMenuEditoreSequenza{}
  4285.       StessoEvento | %10000
  4286.      EndIf
  4287.      If SelezioneEventoMusicale=#EventoMusicaleSelezionato
  4288.       If TastoDelTopoCliccato=#TastoSinistroDelTopoPremuto
  4289.        MuoviConIlTopoGliEventiMusicaliSelezionati{XPosizionePressioneSingola,YPosizionePressioneSingola}
  4290.       EndIf
  4291.       If EventoMusicaleSpostatoConIlTopo=False
  4292.        EventiMusicaliSelezionati-1
  4293.        EventoMusicale()\Stato & %11111110
  4294.       EndIf
  4295.      Else
  4296.       EventiMusicaliSelezionati+1
  4297.       EventoMusicale()\Stato | #EventoMusicaleSelezionato
  4298.      EndIf
  4299.      EventoMusicaleSelezionato=EventoMusicale()\Evento
  4300.      Pop While:Goto FineCicloWhileSelezione
  4301.     EndIf
  4302.    Case "PitchBend"
  4303.     YTopo=Min(Max(YTopo,0),AreaVisibileDeiValori)
  4304.     CurvaDiPicco.b=EventoMusicale()\Evento
  4305.     LunghezzaEvento.w=Len("Bend+0000")*8
  4306.     If SelezioneEventoMusicale=#EventoMusicaleSelezionato Then LunghezzaEvento+Len("X")*8
  4307.     FineCurvaDiPicco.w=InizioEvento+LunghezzaEvento-1
  4308.     XPosizioneCurvaDiPicco.w=(XInizioAreaVisibile+(XTopo-16)*ScalaEventiMusicali)/LarghezzaEventoBase*LarghezzaEventoBase
  4309.     YPosizioneCurvaDiPicco.b=127-YTopo*127/AreaVisibileDeiValori
  4310.     If XPosizioneCurvaDiPicco>=InizioEvento Then StessoEvento | %00001
  4311.     If XPosizioneCurvaDiPicco<=FineCurvaDiPicco Then StessoEvento | %00010
  4312.     If YPosizioneCurvaDiPicco=CurvaDiPicco Then StessoEvento | %00100
  4313.     If SequenzaEvento=SequenzaSelezionata Then StessoEvento | %01000
  4314.     If StessoEvento=%01111
  4315.      If CanaleSelezionato<>CanaleEvento
  4316.       If CanaleSelezionato=0
  4317.        CanaleSelezionato=CanaleEvento
  4318.        Format "00"
  4319.        WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  4320.        WColour CanaleSelezionato-1,16-CanaleSelezionato
  4321.        Print Str$(CanaleSelezionato)
  4322.        Format ""
  4323.        StessoEvento | %10000
  4324.       Else
  4325.        AggiungiEvento=EZRequest("AmySequencer message","Would you add a new pitch bend|with the current channel?","Yes|No")
  4326.        If AggiungiEvento=1
  4327.         CanaleEvento=CanaleSelezionato
  4328.        Else
  4329.         Format "00"
  4330.         WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  4331.         If ColoriOriginali=True
  4332.          WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  4333.         Else
  4334.          WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  4335.         EndIf
  4336.         Print Str$(CanaleSelezionato)
  4337.         CanaleSelezionato=CanaleEvento
  4338.         WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  4339.         WColour CanaleSelezionato-1,16-CanaleSelezionato
  4340.         Print Str$(CanaleSelezionato)
  4341.         Format ""
  4342.         StessoEvento | %10000
  4343.        EndIf
  4344.       EndIf
  4345.      Else
  4346.       TipoDiEventoBase$=TipoDiEventoMusicaleSelezionato$
  4347.       ImpostaMenuEditoreSequenza{}
  4348.       StessoEvento | %10000
  4349.      EndIf
  4350.      If SelezioneEventoMusicale=#EventoMusicaleSelezionato
  4351.       If TastoDelTopoCliccato=#TastoSinistroDelTopoPremuto
  4352.        MuoviConIlTopoGliEventiMusicaliSelezionati{XPosizioneCurvaDiPicco,YPosizioneCurvaDiPicco}
  4353.       EndIf
  4354.       If EventoMusicaleSpostatoConIlTopo=False
  4355.        EventiMusicaliSelezionati-1
  4356.        EventoMusicale()\Stato & %11111110
  4357.       EndIf
  4358.      Else
  4359.       EventiMusicaliSelezionati+1
  4360.       EventoMusicale()\Stato | #EventoMusicaleSelezionato
  4361.      EndIf
  4362.      EventoMusicaleSelezionato=EventoMusicale()\Evento
  4363.      Pop While:Goto FineCicloWhileSelezione
  4364.     EndIf
  4365.    Case "Tempo"
  4366.     YTopo=Min(Max(YTopo,0),AreaVisibileDeiValori)
  4367.     Tempo.b=EventoMusicale()\Evento
  4368.     LunghezzaEvento.w=Len("Tempo00/00")*8
  4369.     If SelezioneEventoMusicale=#EventoMusicaleSelezionato Then LunghezzaEvento+Len("X")*8
  4370.     FineTempo.w=InizioEvento+LunghezzaEvento-1
  4371.     XPosizioneTempo.w=(XInizioAreaVisibile+(XTopo-16)*ScalaEventiMusicali)/LarghezzaEventoBase*LarghezzaEventoBase
  4372.     YPosizioneTempo.b=127-YTopo*127/AreaVisibileDeiValori
  4373.     If XPosizioneTempo>=InizioEvento Then StessoEvento | %00001
  4374.     If XPosizioneTempo<=FineTempo Then StessoEvento | %00010
  4375.     If YPosizioneTempo=Tempo Then StessoEvento | %00100
  4376.     If SequenzaEvento=SequenzaSelezionata Then StessoEvento | %01000
  4377.     If StessoEvento=%01111
  4378.      If CanaleSelezionato<>CanaleEvento
  4379.       If CanaleSelezionato=0
  4380.        CanaleSelezionato=CanaleEvento
  4381.        Format "00"
  4382.        WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  4383.        WColour CanaleSelezionato-1,16-CanaleSelezionato
  4384.        Print Str$(CanaleSelezionato)
  4385.        Format ""
  4386.        StessoEvento | %10000
  4387.       Else
  4388.        AggiungiEvento=EZRequest("AmySequencer message","Would you add a new tempo|with the current channel?","Yes|No")
  4389.        If AggiungiEvento=1
  4390.         CanaleEvento=CanaleSelezionato
  4391.        Else
  4392.         Format "00"
  4393.         WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  4394.         If ColoriOriginali=True
  4395.          WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  4396.         Else
  4397.          WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  4398.         EndIf
  4399.         Print Str$(CanaleSelezionato)
  4400.         CanaleSelezionato=CanaleEvento
  4401.         WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  4402.         WColour CanaleSelezionato-1,16-CanaleSelezionato
  4403.         Print Str$(CanaleSelezionato)
  4404.         Format ""
  4405.         StessoEvento | %10000
  4406.        EndIf
  4407.       EndIf
  4408.      Else
  4409.       TipoDiEventoBase$=TipoDiEventoMusicaleSelezionato$
  4410.       ImpostaMenuEditoreSequenza{}
  4411.       StessoEvento | %10000
  4412.      EndIf
  4413.      If SelezioneEventoMusicale=#EventoMusicaleSelezionato
  4414.       If TastoDelTopoCliccato=#TastoSinistroDelTopoPremuto
  4415.        MuoviConIlTopoGliEventiMusicaliSelezionati{XPosizioneTempo,YPosizioneTempo}
  4416.       EndIf
  4417.       If EventoMusicaleSpostatoConIlTopo=False
  4418.        EventiMusicaliSelezionati-1
  4419.        EventoMusicale()\Stato & %11111110
  4420.       EndIf
  4421.      Else
  4422.       EventiMusicaliSelezionati+1
  4423.       EventoMusicale()\Stato | #EventoMusicaleSelezionato
  4424.      EndIf
  4425.      EventoMusicaleSelezionato=EventoMusicale()\Evento*128+EventoMusicale()\Valore
  4426.      Pop While:Goto FineCicloWhileSelezione
  4427.     EndIf
  4428.    Case "BPM"
  4429.     YTopo=Min(Max(YTopo,0),AreaVisibileDeiValori)
  4430.     BattutePerMinuto.b=EventoMusicale()\Evento
  4431.     LunghezzaEvento.w=Len("BPM000")*8
  4432.     If SelezioneEventoMusicale=#EventoMusicaleSelezionato Then LunghezzaEvento+Len("X")*8
  4433.     FineBattutePerMinuto.w=InizioEvento+LunghezzaEvento-1
  4434.     XPosizioneBattutePerMinuto.w=(XInizioAreaVisibile+(XTopo-16)*ScalaEventiMusicali)/LarghezzaEventoBase*LarghezzaEventoBase
  4435.     YPosizioneBattutePerMinuto.b=97-YTopo*97/AreaVisibileDeiValori
  4436.     If XPosizioneBattutePerMinuto>=InizioEvento Then StessoEvento | %00001
  4437.     If XPosizioneBattutePerMinuto<=FineBattutePerMinuto Then StessoEvento | %00010
  4438.     If YPosizioneBattutePerMinuto=BattutePerMinuto Then StessoEvento | %00100
  4439.     If SequenzaEvento=SequenzaSelezionata Then StessoEvento | %01000
  4440.     If StessoEvento=%01111
  4441.      If CanaleSelezionato<>CanaleEvento
  4442.       If CanaleSelezionato=0
  4443.        CanaleSelezionato=CanaleEvento
  4444.        Format "00"
  4445.        WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  4446.        WColour CanaleSelezionato-1,16-CanaleSelezionato
  4447.        Print Str$(CanaleSelezionato)
  4448.        Format ""
  4449.        StessoEvento | %10000
  4450.       Else
  4451.        AggiungiEvento=EZRequest("AmySequencer message","Would you add a new BPM|with the current channel?","Yes|No")
  4452.        If AggiungiEvento=1
  4453.         CanaleEvento=CanaleSelezionato
  4454.        Else
  4455.         Format "00"
  4456.         WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  4457.         If ColoriOriginali=True
  4458.          WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  4459.         Else
  4460.          WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  4461.         EndIf
  4462.         Print Str$(CanaleSelezionato)
  4463.         CanaleSelezionato=CanaleEvento
  4464.         WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  4465.         WColour CanaleSelezionato-1,16-CanaleSelezionato
  4466.         Print Str$(CanaleSelezionato)
  4467.         Format ""
  4468.         StessoEvento | %10000
  4469.        EndIf
  4470.       EndIf
  4471.      Else
  4472.       TipoDiEventoBase$=TipoDiEventoMusicaleSelezionato$
  4473.       ImpostaMenuEditoreSequenza{}
  4474.       StessoEvento | %10000
  4475.      EndIf
  4476.      If SelezioneEventoMusicale=#EventoMusicaleSelezionato
  4477.       If TastoDelTopoCliccato=#TastoSinistroDelTopoPremuto
  4478.        MuoviConIlTopoGliEventiMusicaliSelezionati{XPosizioneBattutePerMinuto,YPosizioneBattutePerMinuto}
  4479.       EndIf
  4480.       If EventoMusicaleSpostatoConIlTopo=False
  4481.        EventiMusicaliSelezionati-1
  4482.        EventoMusicale()\Stato & %11111110
  4483.       EndIf
  4484.      Else
  4485.       EventiMusicaliSelezionati+1
  4486.       EventoMusicale()\Stato | #EventoMusicaleSelezionato
  4487.      EndIf
  4488.      EventoMusicaleSelezionato=EventoMusicale()\Evento
  4489.      Pop While:Goto FineCicloWhileSelezione
  4490.     EndIf
  4491.    End Select
  4492.   Else
  4493.    If EventoMusicale()\Sequenza=SequenzaSelezionata
  4494.     If SelezioneEventoMusicale=#EventoMusicaleSelezionato
  4495.      Select Modo
  4496.      Case #CambiaIlCanaleDegliEventiMusicaliSelezionati
  4497.       EventoMusicale()\Canale=CanaleSelezionato
  4498.      Case #AlzaDiUnoGliEventiMusicaliSelezionati
  4499.       If TipoDiEventoMusicaleSelezionato$="BPM"
  4500.        If EventoMusicale()\Evento<97
  4501.         EventoMusicale()\Valore+1
  4502.         If EventoMusicale()\Valore>2
  4503.          EventoMusicale()\Valore=0:EventoMusicale()\Evento+1
  4504.         EndIf
  4505.        EndIf
  4506.       Else
  4507.        If EventoMusicale()\Evento<127 Then EventoMusicale()\Evento+1
  4508.       EndIf
  4509.      Case #AbbassaDiUnoGliEventiMusicaliSelezionati
  4510.       If TipoDiEventoMusicaleSelezionato$="BPM"
  4511.        If EventoMusicale()\Evento>0
  4512.         EventoMusicale()\Valore-1
  4513.         If EventoMusicale()\Valore<0
  4514.          EventoMusicale()\Valore=2:EventoMusicale()\Evento-1
  4515.         EndIf
  4516.        Else
  4517.         If EventoMusicale()\Valore>1 Then EventoMusicale()\Valore-1
  4518.        EndIf
  4519.       Else
  4520.        If EventoMusicale()\Evento>0 Then EventoMusicale()\Evento-1
  4521.       EndIf
  4522.      Case #SpostaAvantiNelTempoGliEventiMusicaliSelezionati
  4523.       EventoMusicale()\Inizio+LarghezzaEventoBase
  4524.      Case #SpostaIndietroNelTempoGliEventiMusicaliSelezionati
  4525.       EventoMusicale()\Inizio-LarghezzaEventoBase:If EventoMusicale()\Inizio<0 Then EventoMusicale()\Inizio=0
  4526.      Case #EliminaGliEventiMusicaliSelezionati
  4527.       EventiMusicaliSelezionati-1
  4528.       DurataEventoMusicale.l=Max(EventoMusicale()\Durata,LarghezzaEventoBase)
  4529.       KillItem EventoMusicale():EventiMusicali-1
  4530.       If EventiMusicali=0 Then DurataSequenza=0
  4531.      Case #DeselezionaTuttiGliEventiMusicali
  4532.       EventiMusicaliSelezionati-1
  4533.       EventoMusicale()\Stato & %11111110
  4534.      Case #InvertiLaSelezioneDiTuttiGliEventiMusicali
  4535.       EventiMusicaliSelezionati-1
  4536.       EventoMusicale()\Stato & %11111110
  4537.      End Select
  4538.      Select TipoDiEventoMusicaleSelezionato$
  4539.      Case "Note"
  4540.       Select Modo
  4541.       Case #AllungaLaDurataDelleNoteSelezionate
  4542.        If EventoMusicale()\Durata=#_MClksPerSP
  4543.         EventoMusicale()\Durata=LarghezzaEventoBase
  4544.        Else
  4545.         EventoMusicale()\Durata+LarghezzaEventoBase
  4546.        EndIf
  4547.        NotaPiuLunga=Max(NotaPiuLunga,EventoMusicale()\Durata)
  4548.        DurataSequenza=Max(DurataSequenza,EventoMusicale()\Inizio+EventoMusicale()\Durata)
  4549.       Case #RiduciLaDurataDelleNoteSelezionate
  4550.        EventoMusicale()\Durata-LarghezzaEventoBase
  4551.        EventoMusicale()\Durata=Max(EventoMusicale()\Durata,#_MClksPerSP)
  4552.        NotaPiuLunga=Max(EventoMusicale()\Durata,NotaPiuLunga)
  4553.       Case #AlzaDiUnOttavaLeNoteSelezionate
  4554.        EventoMusicale()\Evento+12
  4555.        EventoMusicale()\Evento=Min(EventoMusicale()\Evento,127)
  4556.       Case #AbbassaDiUnOttavaLeNoteSelezionate
  4557.        EventoMusicale()\Evento-12
  4558.        EventoMusicale()\Evento=Max(EventoMusicale()\Evento,0)
  4559.       Case #CambiaIlValoreDegliEventiMusicaliSelezionati
  4560.        EventoMusicale()\Valore=ValoreEventoBase
  4561.       End Select
  4562.      Case "Tempo"
  4563.       NuoviBattiti.b=EventoMusicale()\Evento MOD 16+1
  4564.       NuoveMisure.b=EventoMusicale()\Evento/16+1
  4565.       Select Modo
  4566.       Case #AggiungiUnBattitoAlTempoSelezionato
  4567.        NuoviBattiti+1
  4568.        NuoviBattiti=Min(NuoviBattiti,16)
  4569.       Case #TogliUnBattitoAlTempoSelezionato
  4570.        NuoviBattiti-1
  4571.        NuoviBattiti=Max(NuoviBattiti,1)
  4572.       Case #AggiungiUnaMisuraAlTempoSelezionato
  4573.        NuoveMisure+1
  4574.        NuoveMisure=Min(NuoveMisure,8)
  4575.       Case #TogliUnaMisuraAlTempoSelezionato
  4576.        NuoveMisure-1
  4577.        NuoveMisure=Max(NuoveMisure,1)
  4578.       End Select
  4579.       EventoMusicale()\Evento=(NuoveMisure-1)*16+NuoviBattiti-1
  4580.      Case "BPM"
  4581.       Select Modo
  4582.       Case #AggiungiDieciAgliEventiMusicaliSelezionati
  4583.        If EventoMusicale()\Evento<94
  4584.         EventoMusicale()\Evento+3
  4585.         EventoMusicale()\Valore+1
  4586.         If EventoMusicale()\Valore>2
  4587.          EventoMusicale()\Valore=0:EventoMusicale()\Evento+1
  4588.         EndIf
  4589.        EndIf
  4590.       Case #SottraiDieciAgliEventiMusicaliSelezionati
  4591.        If EventoMusicale()\Evento>3
  4592.         EventoMusicale()\Evento-3:EventoMusicale()\Valore-1
  4593.         If EventoMusicale()\Valore<0
  4594.          EventoMusicale()\Evento-1:EventoMusicale()\Valore=2
  4595.         EndIf
  4596.        Else
  4597.         If EventoMusicale()\Evento>2 AND EventoMusicale()\Valore>1
  4598.          EventoMusicale()\Evento-3:EventoMusicale()\Valore-1
  4599.         EndIf
  4600.        EndIf
  4601.       End Select
  4602.      Default
  4603.       Select Modo
  4604.       Case #AggiungiDieciAgliEventiMusicaliSelezionati
  4605.        EventoMusicale()\Evento+10
  4606.        EventoMusicale()\Evento=Min(EventoMusicale()\Evento,127)
  4607.       Case #SottraiDieciAgliEventiMusicaliSelezionati
  4608.        EventoMusicale()\Evento-10
  4609.        EventoMusicale()\Evento=Max(EventoMusicale()\Evento,0)
  4610.       End Select
  4611.      End Select
  4612.     Else
  4613.      Select Modo
  4614.      Case #SelezionaTuttiGliEventiMusicali
  4615.       EventiMusicaliSelezionati+1
  4616.       EventoMusicale()\Stato | #EventoMusicaleSelezionato
  4617.      Case #InvertiLaSelezioneDiTuttiGliEventiMusicali
  4618.       EventiMusicaliSelezionati+1
  4619.       EventoMusicale()\Stato | #EventoMusicaleSelezionato
  4620.      End Select
  4621.     EndIf
  4622.    EndIf
  4623.   EndIf
  4624.  Wend
  4625. FineCicloWhileSelezione
  4626.  If Modo=#SelezionaUnEvento AND StessoEvento<%11111
  4627.   If CanaleSelezionato>0
  4628.    LastItem EventoMusicale()
  4629.    If AddItem(EventoMusicale())=True
  4630.     EventiMusicali+1
  4631.     EventoMusicale()\Inizio=(XInizioAreaVisibile+(XTopo-16)*ScalaEventiMusicali)/LarghezzaEventoBase*LarghezzaEventoBase
  4632.     EventoMusicale()\Canale=CanaleSelezionato
  4633.     EventoMusicale()\Sequenza=SequenzaSelezionata
  4634.     EventoMusicale()\Stato=0
  4635.     EventoMusicale()\Tipo=TipoDiEventoBase$
  4636.     Select TipoDiEventoBase$
  4637.     Case "Note"
  4638.      YTopo=Min(Max(YTopo,0),AltezzaInternaFinestraEditoreSequenza-1-8-8)
  4639.      EventoMusicale()\Evento=127-YInizioAreaVisibile-YTopo/8
  4640.      EventoMusicale()\Durata=LarghezzaEventoBase
  4641.      EventoMusicale()\Valore=ValoreEventoBase
  4642.      NotaSuonata\Evento=EventoMusicale()\Evento,0,EventoMusicale()\Canale,EventoMusicale()\Sequenza
  4643.      NotaSuonata\Durata=EventoMusicale()\Durata,EventoMusicale()\Valore
  4644.      SuonaLaNota{NotaSuonata\Evento,NotaSuonata\Valore,NotaSuonata\Canale,#EseguiGliEventiMusicaliDallEditoreSequenza}
  4645.      NotaSuonata\Stato=True
  4646.     Case "Program"
  4647.      YTopo=Min(Max(YTopo,0),AreaVisibileDeiValori)
  4648.      EventoMusicale()\Evento=127-YTopo*127/AreaVisibileDeiValori
  4649.      EventoMusicale()\Evento=Min(EventoMusicale()\Evento,98)
  4650.      EventoMusicale()\Durata=2
  4651.     Case "Control"
  4652.      YTopo=Min(Max(YTopo,0),AreaVisibileDeiValori)
  4653.      EventoMusicale()\Evento=127-YTopo*127/AreaVisibileDeiValori
  4654.      EventoMusicale()\Durata=2
  4655.      EventoMusicale()\Valore=ValoreEventoBase
  4656.     Case "PolyAftertouch"
  4657.      YTopo=Min(Max(YTopo,0),AreaVisibileDeiValori)
  4658.      EventoMusicale()\Evento=127-YTopo*127/AreaVisibileDeiValori
  4659.      EventoMusicale()\Durata=2
  4660.     Case "MonoAftertouch"
  4661.      YTopo=Min(Max(YTopo,0),AreaVisibileDeiValori)
  4662.      EventoMusicale()\Evento=127-YTopo*127/AreaVisibileDeiValori
  4663.      EventoMusicale()\Durata=2
  4664.     Case "PitchBend"
  4665.      YTopo=Min(Max(YTopo,0),AreaVisibileDeiValori)
  4666.      EventoMusicale()\Evento=127-YTopo*127/AreaVisibileDeiValori
  4667.      EventoMusicale()\Durata=2
  4668.     Case "Tempo"
  4669.      YTopo=Min(Max(YTopo,0),AreaVisibileDeiValori)
  4670.      EventoMusicale()\Evento=127-YTopo*127/AreaVisibileDeiValori
  4671.      EventoMusicale()\Durata=2
  4672.     Case "BPM"
  4673.      YTopo=Min(Max(YTopo,0),AreaVisibileDeiValori)
  4674.      EventoMusicale()\Evento=97-YTopo*97/AreaVisibileDeiValori
  4675.      If EventoMusicale()\Evento=97 Then EventoMusicale()\Valore=0
  4676.      If EventoMusicale()\Evento=0 Then EventoMusicale()\Valore=1
  4677.      EventoMusicale()\Durata=2
  4678.     End Select
  4679.     If TipoDiEventoBase$="PitchBend"
  4680.      EventoMusicaleSelezionato=EventoMusicale()\Evento*128+EventoMusicale()\Valore
  4681.     Else
  4682.      EventoMusicaleSelezionato=EventoMusicale()\Evento
  4683.     EndIf
  4684.     DurataSequenza=Max(DurataSequenza,EventoMusicale()\Inizio+Max(EventoMusicale()\Durata,LarghezzaEventoBase))
  4685.    Else
  4686.     EZRequest "AmySequencer message","You have used all the available events","OK"
  4687.    EndIf
  4688.   Else
  4689.    EZRequest "AmySequencer message","You must select a channel first","OK"
  4690.   EndIf
  4691.  EndIf
  4692.  If Modo=#SelezionaGliEventiMusicaliUguali
  4693.   ResetList EventoMusicale()
  4694.   While NextItem(EventoMusicale())=True
  4695.    If  EventoMusicale()\Canale=CanaleSelezionato AND EventoMusicale()\Sequenza=SequenzaSelezionata
  4696.     If EventoMusicale()\Tipo="PitchBend"
  4697.      If EventoMusicale()\Evento*128+EventoMusicale()\Valore=EventoMusicaleSelezionato
  4698.       If EventoMusicale()\Stato & #EventoMusicaleSelezionato=0
  4699.        EventoMusicale()\Stato | #EventoMusicaleSelezionato
  4700.        EventiMusicaliSelezionati+1
  4701.       EndIf
  4702.      EndIf
  4703.     Else
  4704.      If EventoMusicale()\Evento=EventoMusicaleSelezionato
  4705.       If EventoMusicale()\Stato & #EventoMusicaleSelezionato=0
  4706.        EventoMusicale()\Stato | #EventoMusicaleSelezionato
  4707.        EventiMusicaliSelezionati+1
  4708.       EndIf
  4709.      EndIf
  4710.     EndIf
  4711.    EndIf
  4712.   Wend
  4713.  EndIf
  4714.  If NotaPiuLunga>0
  4715.   XMessaggio.w=16*16+8*3+8*4+8*6
  4716.   YMessaggio.w=AltezzaInternaFinestraEditoreSequenza-8
  4717.   WLocate XMessaggio,YMessaggio
  4718.   WColour 1,0
  4719.   Print SPACE$(80-XMessaggio/8)
  4720.   WLocate XMessaggio,YMessaggio
  4721.   Print "Len>":ConvertiIlTempoInBattute{NotaPiuLunga,Battiti,Misure,True}
  4722.  EndIf
  4723.  DurataSequenza=0
  4724.  ResetList EventoMusicale()
  4725.  While NextItem(EventoMusicale())=True
  4726.   If EventoMusicale()\Sequenza=SequenzaSelezionata
  4727.    DurataSequenza=Max(DurataSequenza,EventoMusicale()\Inizio+EventoMusicale()\Durata)
  4728.   EndIf
  4729.  Wend
  4730.  LimiteMassimoXInizioAreaVisibile.l=Max(DurataSequenza-(LarghezzaInternaFinestraEditoreSequenza-16)*ScalaEventiMusicali,0)
  4731.  XInizioAreaVisibile=Min(XInizioAreaVisibile,LimiteMassimoXInizioAreaVisibile)
  4732. End Statement
  4733.  
  4734. ;--------------------------------------------
  4735. ;questa procedura esegue gli eventi musicali
  4736. ;this procedure executes the musical events
  4737. ;-------------------------------------------
  4738. Statement EseguiGliEventiMusicali{Modo.b}
  4739. SHARED AltezzaInternaFinestraEditoreSequenza
  4740. SHARED BattutePerMinuto
  4741. SHARED DurataSequenza
  4742. SHARED EventoMusicale()
  4743. SHARED FineMotivo
  4744. SHARED LarghezzaInternaFinestraEditoreSequenza
  4745. SHARED ScalaEventiMusicali
  4746. SHARED Sequenza()
  4747. SHARED SequenzaSelezionata
  4748. SHARED TastoEsc$
  4749. SHARED XInizioAreaVisibile
  4750.  PushItem Sequenza()
  4751.  TicPerCinquantesimoDiSecondo.f=BattutePerMinuto*192*4/3000
  4752.  Tempo.l=0
  4753.  If Modo=#EseguiGliEventiMusicaliDallaFinestraPrincipale
  4754.   FineEsecuzione.l=FineMotivo
  4755.  EndIf
  4756.  If Modo=#EseguiGliEventiMusicaliDallEditoreSequenza
  4757.   FineEsecuzione=DurataSequenza
  4758.   FineTempoVisibile.l=(LarghezzaInternaFinestraEditoreSequenza-16)*ScalaEventiMusicali
  4759.  EndIf
  4760.  Repeat
  4761.   EventoEsecutoreEventiMusicaliMusicali.l=Event
  4762.   Select EventoEsecutoreEventiMusicali
  4763.   Case #HaiChiusoLaFinestra
  4764.    Pop Repeat:Goto FineCicloRepeatEsecutore
  4765.   Case #HaiPremutoUnTasto
  4766.    TastoPremuto$=Inkey$
  4767.   End Select
  4768.   ResetList EventoMusicale()
  4769.   While NextItem(EventoMusicale())
  4770.    SequenzaEventoMusicale.l=EventoMusicale()\Sequenza
  4771.    If SequenzaEventoMusicale=SequenzaSelezionata OR Modo=#EseguiGliEventiMusicaliDallaFinestraPrincipale
  4772.     If Modo=#EseguiGliEventiMusicaliDallaFinestraPrincipale
  4773.      Sequenza.l=0
  4774.      ResetList Sequenza()
  4775.      While NextItem(Sequenza())=True
  4776.       Sequenza+1
  4777.       If Sequenza=SequenzaEventoMusicale
  4778.        Pop While:Goto FineCicloWhileEsecuzione
  4779.       EndIf
  4780.      Wend
  4781. FineCicloWhileEsecuzione
  4782.      InizioEventoMusicale.l=Sequenza()\Inizio+EventoMusicale()\Inizio
  4783.     EndIf
  4784.     If Modo=#EseguiGliEventiMusicaliDallEditoreSequenza
  4785.      InizioEventoMusicale=EventoMusicale()\Inizio
  4786.     EndIf
  4787.     TipoDiEventoMusicale$=EventoMusicale()\Tipo
  4788.     DurataEventoMusicale.l=EventoMusicale()\Durata
  4789.     FineEventoMusicale.l=InizioEventoMusicale+DurataEventoMusicale-1
  4790.     CanaleEventoMusicale.b=EventoMusicale()\Canale
  4791.     ValoreEventoMusicale.b=EventoMusicale()\Valore
  4792.     EventoMusicaleSuonato.b=EventoMusicale()\Stato & #EventoMusicaleSuonato
  4793.     EventoMusicaleTerminato.b=EventoMusicale()\Stato & #EventoMusicaleTerminato
  4794.     If EventoMusicaleSuonato=0 AND EventoMusicaleTerminato=0 AND Tempo>=InizioEventoMusicale
  4795.      Select TipoDiEventoMusicale$
  4796.      Case "Note"
  4797.       Nota.b=EventoMusicale()\Evento
  4798.       VelocitaNota.b=ValoreEventoMusicale
  4799.       SuonaLaNota{Nota,VelocitaNota,CanaleEventoMusicale,Modo}
  4800.      Case "Program"
  4801.       Programma.b=EventoMusicale()\Evento
  4802.       EseguiIlCambioDiProgramma{Programma,CanaleEventoMusicale,Modo}
  4803.      Case "Control"
  4804.       Controllo.b=EventoMusicale()\Evento
  4805.       ValoreConttrollo.b=ValoreEventoMusicale
  4806.       EseguiIlCambioDiControllo{Controllo,ValoreControllo,CanaleEventoMusicale,Modo}
  4807.      Case "PolyAftertouch"
  4808.       PressioneMultipla.b=EventoMusicale()\Evento
  4809.       EseguiLaPressioneMultipla{PressionMultipla,CanaleEventoMusicale,Modo}
  4810.      Case "MonoAftertouch"
  4811.       PressioneSingola.b=EventoMusicale()\Evento
  4812.       EseguiLaPressioneSingola{PressioneSingola,CanaleEventoMusicale,Modo}
  4813.      Case "PitchBend"
  4814.       CurvaDiPicco.w=EventoMusicale()\Evento*128+EventoMusicale()\Valore
  4815.       EseguiLaCurvaDiPicco{CurvaDiPicco,CanaleEventoMusicale,Modo}
  4816.      Case "Tempo"
  4817.       NuovoTempo.b=EventoMusicale()\Evento
  4818.       MostraIlTempo{NuovoTempo,CanaleEventoMusicale,Modo}
  4819.      Case "BPM"
  4820.       NuoveBattutePerMinuto.w=9+EventoMusicale()\Evento*3+EventoMusicale()\Valore
  4821.       TicPerCinquantesimoDiSecondo=NuoveBattutePerMinuto*192*4/3000
  4822.       MostraLeBattutePerMinuto{NuoveBattutePerMinuto,CanaleEventoMusicale,Modo}
  4823.      End Select
  4824.      If Modo=#EseguiGliEventiMusicaliDallEditoreSequenza
  4825.       Evento.b=EventoMusicale()\Evento
  4826.       InizioEvento.l=InizioEventoMusicale
  4827.       DurataEvento.l=DurataEventoMusicale
  4828.       CanaleEvento.b=CanaleEventoMusicale
  4829.       ValoreEvento.b=ValoreEventoMusicale
  4830.       If TipoDiEventoMusicale$="PitchBend"
  4831.        CurvaDiPicco.w=Evento*128+ValoreEvento
  4832.        DisegnaUnEventoMusicale{TipoDiEventoMusicale$,CurvaDiPicco,InizioEvento,DurataEvento,CanaleEvento,#EventoMusicaleSuonato}
  4833.       Else
  4834.        DisegnaUnEventoMusicale{TipoDiEventoMusicale$,Evento,InizioEvento,DurataEvento,CanaleEvento,#EventoMusicaleSuonato}
  4835.       EndIf
  4836.      EndIf
  4837.      EventoMusicale()\Stato | #EventoMusicaleSuonato
  4838.     EndIf
  4839.     If EventoMusicaleSuonato=#EventoMusicaleSuonato AND EventoMusicaleTerminato=0 AND Tempo>=FineEventoMusicale
  4840.      If TipoDiEventoMusicale$="Note"
  4841.       Nota=EventoMusicale()\Evento
  4842.       VelocitaNota=EventoMusicale()\Valore
  4843.       SmettiDiSuonareLaNota{Nota,VelocitaNota,CanaleEventoMusicale,Modo}
  4844.      EndIf
  4845.      If Modo=#EseguiGliEventiMusicaliDallEditoreSequenza
  4846.       Evento=EventoMusicale()\Evento
  4847.       InizioEvento=InizioEventoMusicale
  4848.       DurataEvento=DurataEventoMusicale
  4849.       CanaleEvento=CanaleEventoMusicale
  4850.       ValoreEvento=EventoMusicale()\Valore
  4851.       StatoOriginaleEvento.b=EventoMusicale()\Stato & %11110111
  4852.       If TipoDiEventoMusicale$="PitchBend"
  4853.        CurvaDiPicco.w=Evento*128+ValoreEvento
  4854.        DisegnaUnEventoMusicale{TipoDiEventoMusicale$,CurvaDiPicco,InizioEvento,DurataEvento,CanaleEvento,StatoOriginaleEvento}
  4855.       Else
  4856.        DisegnaUnEventoMusicale{TipoDiEventoMusicale$,Evento,InizioEvento,DurataEvento,CanaleEvento,StatoOriginaleEvento}
  4857.       EndIf
  4858.      EndIf
  4859.      EventoMusicale()\Stato | #EventoMusicaleTerminato
  4860.     EndIf
  4861.    EndIf
  4862.   Wend
  4863.   VWait
  4864.   Tempo+TicPerCinquantesimoDiSecondo
  4865.   If Modo=#EseguiGliEventiMusicaliDallEditoreSequenza
  4866.    If Tempo-XInizioAreaVisibile>FineTempoVisibile
  4867.     XInizioAreaVisibile=Tempo
  4868.     MostraLeNoteDiSfondoConILoroNomi{}
  4869.     MostraLeBattute{}
  4870.     MostraGliEventiMusicali{}
  4871.     MostraSliderEditoreSequenza{}
  4872.    EndIf
  4873.   EndIf
  4874.  Until Tempo>=FineEsecuzione OR TastoPremuto$=TastoEsc$ OR TastoPremuto$=" "
  4875. FineCicloRepeatEsecutore
  4876.  ResetList EventoMusicale()
  4877.  While NextItem(EventoMusicale())
  4878.   EventoMusicaleSuonato.b=EventoMusicale()\Stato & #EventoMusicaleSuonato
  4879.   If EventoMusicale()\Tipo="Note" AND EventoMusicaleSuonato=#EventoMusicaleSuonato
  4880.    Nota=EventoMusicale()\Evento
  4881.    VelocitaNota=EventoMusicale()\Valore
  4882.    CanaleNota.b=EventoMusicale()\Canale
  4883.    SmettiDiSuonareLaNota{Nota,VelocitaNota,CanaleNota,Modo}
  4884.   EndIf
  4885.   EventoMusicale()\Stato & %11100111
  4886.  Wend
  4887.  PopItem Sequenza()
  4888.  Quiet %1111
  4889. End Statement
  4890.  
  4891. ;-------------------------------------------------------------------------
  4892. ;questa procedura gestisce il titolo della finestra dell'editore sequenza
  4893. ;this procedure handles the sequence editor window title
  4894. ;--------------------------------------------------------
  4895. Statement MostraTitoloFinestraEditoreSequenza{}
  4896. SHARED EventiMusicali
  4897. SHARED EventiMusicaliSelezionati
  4898. SHARED Sequenza
  4899. SHARED Sequenza()
  4900. SHARED SequenzaSelezionata
  4901.  TitoloFinestra$="Sequence "+Str$(SequenzaSelezionata)+":"
  4902.  NomeSequenza$=Sequenza()\Nome
  4903.  If NomeSequenza$="" Then NomeSequenza$="unnamed"
  4904.  TitoloFinestra$+NomeSequenza$+"-"
  4905.  If EventiMusicali>0
  4906.   TitoloFinestra$+Str$(EventiMusicaliSelezionati)+" selected event"
  4907.   If EventiMusicaliSelezionati<>1 Then TitoloFinestra$+"s"
  4908.   TitoloFinestra$+" of "+Str$(EventiMusicali)+" event"
  4909.   If EventiMusicali<>1 Then TitoloFinestra$+"s"
  4910.  Else
  4911.   TitoloFinestra$+"no events into this sequence"
  4912.  EndIf
  4913.  WTitle TitoloFinestra$
  4914. End Statement
  4915.  
  4916. ;converts the given value if over 127 into the negative equivalent
  4917. Function.b ConvertiOltreCentoventisetteInNegativo{Dato.w}
  4918.  If Dato>127 Then Dato-256
  4919.  DatoConvertito.b=Dato
  4920.  Function Return DatoConvertito
  4921. End Function
  4922.  
  4923. ;----------------------------------------------
  4924. ;questa procedura registra gli eventi musicali
  4925. ;this procedure records the musical events
  4926. ;------------------------------------------
  4927. Statement RegistraGliEventiMusicali{Modo.b}
  4928. SHARED AltezzaInternaFinestraEditoreSequenza
  4929. SHARED Battiti
  4930. SHARED BattutePerMinuto
  4931. SHARED DurataSequenza
  4932. SHARED EventiMusicali
  4933. SHARED EventoMusicale()
  4934. SHARED LarghezzaInternaFinestraEditoreSequenza
  4935. SHARED Misure
  4936. SHARED ScalaEventiMusicali
  4937. SHARED Sequenza()
  4938. SHARED SequenzaSelezionata
  4939. SHARED TastoCursoreGiu$
  4940. SHARED TastoCursoreSu$
  4941. SHARED TastoEsc$
  4942. SHARED XInizioAreaVisibile
  4943.  If SequenzaSelezionata>0
  4944.   Messaggio$="Begin recording?|If you'll choose|OK use CURSOR KEYS|UP & DOWN to change|BPM and press SPACE|to end recording"
  4945.   Registrazione.b=EZRequest("AmySequencer message",Messaggio$,"OK|Cancel")
  4946.   If Registrazione=0 Then Statement Return
  4947.   If Modo=#EseguiGliEventiMusicaliDallEditoreSequenza
  4948.    FineTempoVisibile.l=(LarghezzaInternaFinestraEditoreSequenza-16)*ScalaEventiMusicali
  4949.   EndIf
  4950.   Battito.b=Misure
  4951.   TicPerCinquantesimoDiSecondo.f=BattutePerMinuto*192*4/3000
  4952.   Tempo.l=0
  4953.   Repeat
  4954.    EventoRegistratoreEventiMusicali.l=Event
  4955.    Select EventoRegistratoreEventiMusicali
  4956.    Case #HaiChiusoLaFinestra
  4957.     Pop Repeat:Statement Return
  4958.    Case #HaiPremutoUnTasto
  4959.     TastoPremuto$=Inkey$
  4960.     Select TastoPremuto$
  4961.     Case TastoCursoreSu$
  4962.      If BattutePerMinuto<300
  4963.       BattutePerMinuto+1
  4964.       TicPerCinquantesimoDiSecondo=BattutePerMinuto*192*4/3000
  4965.       MostraLeBattutePerMinuto{BattutePerMinuto,10,Modo}
  4966.      EndIf
  4967.     Case TastoCursoreGiu$
  4968.      If BattutePerMinuto>10
  4969.       BattutePerMinuto-1
  4970.       TicPerCinquantesimoDiSecondo=BattutePerMinuto*192*4/3000
  4971.       MostraLeBattutePerMinuto{BattutePerMinuto,10,Modo}
  4972.      EndIf
  4973.     End Select
  4974.    End Select
  4975.    ByteDiStato.b=ConvertiOltreCentoventisetteInNegativo{ReadSerial(0)}
  4976.    TipoDiEventoMusicale.b=ByteDiStato & #_StatusBits
  4977.    CanaleEvento.b=ConvertiOltreCentoventisetteInNegativo{ByteDiStato & #_ChannelBits}+1
  4978.    Select TipoDiEventoMusicale
  4979.    Case #_NoteOn
  4980.     TipoDiEventoMusicale$="Note"
  4981.     Evento.b=ConvertiOltreCentoventisetteInNegativo{ReadSerial(0)}
  4982.     ValoreEvento.b=ConvertiOltreCentoventisetteInNegativo{ReadSerial(0)}
  4983.    Case #_NoteOff
  4984.     TipoDiEventoMusicale$="NoteOff"
  4985.     Evento=ConvertiOltreCentoventisetteInNegativo{ReadSerial(0)}
  4986.     ValoreEvento=ConvertiOltreCentoventisetteInNegativo{ReadSerial(0)}
  4987.    Case #_ProgramChange
  4988.     TipoDiEventoMusicale$="Program"
  4989.     Evento=ConvertiOltreCentoventisetteInNegativo{ReadSerial(0)}
  4990.    Case #_ControlChange
  4991.     TipoDiEventoMusicale$="Control"
  4992.     Evento=ConvertiOltreCentoventisetteInNegativo{ReadSerial(0)}
  4993.     ValoreEvento=ConvertiOltreCentoventisetteInNegativo{ReadSerial(0)}
  4994.    Case #_PolyphonicKeyPressure
  4995.     TipoDiEventoMusicale$="PolyAftertouch"
  4996.     Evento=ConvertiOltreCentoventisetteInNegativo{ReadSerial(0)}
  4997.    Case #_ChannelKeyPressure
  4998.     TipoDiEventoMusicale$="MonoAftertouch"
  4999.     Evento=ConvertiOltreCentoventisetteInNegativo{ReadSerial(0)}
  5000.    Case #_PitchBend
  5001.     TipoDiEventoMusicale$="PitchBend"
  5002.     ValoreEvento=ConvertiOltreCentoventisetteInNegativo{ReadSerial(0)}
  5003.     Evento=ConvertiOltreCentoventisetteInNegativo{ReadSerial(0)}
  5004.    Default
  5005.     TipoDiEventoMusicale$=""
  5006.    End Select
  5007.    If TipoDiEventoMusicale$<>""
  5008.     If TipoDiEventoMusicale$<>"NoteOff"
  5009.      LastItem EventoMusicale()
  5010.      If AddItem(EventoMusicale())=True
  5011.       EventoMusicale()\Tipo=TipoDiEventoMusicale$
  5012.       EventoMusicale()\Evento=Evento
  5013.       EventoMusicale()\Inizio=Tempo
  5014.       EventoMusicale()\Canale=CanaleEvento
  5015.       EventoMusicale()\Sequenza=SequenzaSelezionata
  5016.       EventoMusicale()\Durata=2
  5017.       If TipoDiEventoMusicale$="Note" Then EventoMusicale()\Valore=ValoreEvento
  5018.       If TipoDiEventoMusicale$="Control" Then EventoMusicale()\Valore=ValoreEvento
  5019.       If TipoDiEventoMusicale$="PitchBend" Then EventoMusicale()\Valore=ValoreEvento
  5020.       Select TipoDiEventoMusicale$
  5021.       Case "Note"
  5022.        Nota.b=EventoMusicale()\Evento
  5023.        SuonaLaNota{Nota,ValoreEvento,CanaleEvento,Modo}
  5024.       Case "Program"
  5025.        Programma.b=EventoMusicale()\Evento
  5026.        EseguiIlCambioDiProgramma{Programma,CanaleEvento,Modo}
  5027.       Case "Control"
  5028.        Controllo.b=EventoMusicale()\Evento:ValoreEvento=EventoMusicale()\Valore
  5029.        EseguiIlCambioDiControllo{Controllo,ValoreEvento,CanaleEvento,Modo}
  5030.       Case "PolyAftertouch"
  5031.        PressioneMultipla.b=EventoMusicale()\Evento
  5032.        EseguiLaPressioneMultipla{PressioneMultipla,CanaleEvento,Modo}
  5033.       Case "MonoAftertouch"
  5034.        PressioneSingola.b=EventoMusicale()\Evento
  5035.        EseguiLaPressioneSingola{PressioneSingola,CanaleEvento,Modo}
  5036.       Case "PitchBend"
  5037.        CurvaDiPicco.w=EventoMusicale()\Evento*128+EventoMusicale()\Valore
  5038.        EseguiLaCurvaDiPicco{CurvaDiPicco,CanaleEvento,Modo}
  5039.       End Select
  5040.       EventoMusicale()\Stato | #EventoMusicaleSuonato
  5041.       If Modo=#EseguiGliEventiMusicaliDallaFinestraPrincipale
  5042.       Sequenza()\EventiMusicali+1
  5043.       EndIf
  5044.       If Modo=#EseguiGliEventiMusicaliDallEditoreSequenza
  5045.        EventiMusicali+1:MostraTitoloFinestraEditoreSequenza{}
  5046.       EndIf
  5047.      Else
  5048.       EZRequest "AmySequencer message","You have used all the available events","OK"
  5049.       Statement Return
  5050.      EndIf
  5051.     Else
  5052.      SmettiDiSuonareLaNota{Evento,ValoreEvento,CanaleEvento,Modo}
  5053.      EventoMusicale()\Stato & %11110111
  5054.      EventoMusicale()\Stato | #EventoMusicaleTerminato
  5055.     EndIf
  5056.    EndIf
  5057.    VWait
  5058.    Tempo+TicPerCinquantesimoDiSecondo
  5059.    If Modo=#EseguiGliEventiMusicaliDallaFinestraPrincipale
  5060.     Sequenza()\Durata=Tempo-Sequenza()\Inizio+1
  5061.    EndIf
  5062.    If Modo=#EseguiGliEventiMusicaliDallEditoreSequenza
  5063.     If Tempo-XInizioAreaVisibile>FineTempoVisibile
  5064.      XInizioAreaVisibile=Tempo
  5065.      MostraLeNoteDiSfondoConILoroNomi{}
  5066.      MostraLeBattute{}
  5067.      MostraSliderEditoreSequenza{}
  5068.     EndIf
  5069.     Sequenza()\Durata=Tempo+1
  5070.     DurataSequenza=Tempo+1
  5071.    EndIf
  5072.    TempoMetronomo.w+TicPerCinquantesimoDiSecondo
  5073.    If TempoMetronomo>=(192.0*Battiti)/Misure
  5074.     If NotaMetronomoSuonata.b=True
  5075.      SmettiDiSuonareLaNota{76,0,10,Modo}
  5076.      TempoMetronomo=0
  5077.      NotaMetronomoSuonata=False
  5078.     Else
  5079.      SuonaLaNota{76,(127.0*Battito)/Misure,10,Modo}
  5080.      Battito-1:If Battito=0 Then Battito=Misure
  5081.      NotaMetronomoSuonata=True
  5082.     EndIf
  5083.    EndIf
  5084.    ResetList EventoMusicale()
  5085.    While NextItem(EventoMusicale())=True
  5086.     TipoDiEventoMusicale$=EventoMusicale()\Tipo
  5087.     Evento=EventoMusicale()\Evento
  5088.     InizioEvento.l=EventoMusicale()\Inizio
  5089.     DurataEvento.l=EventoMusicale()\Durata
  5090.     CanaleEvento=EventoMusicale()\Canale
  5091.     ValoreEvento=EventoMusicale()\Valore
  5092.     StatoEvento.b=EventoMusicale()\Stato
  5093.     EventoMusicaleSuonato.b=StatoEvento & #EventoMusicaleSuonato
  5094.     If EventoMusicaleSuonato=#EventoMusicaleSuonato
  5095.      If TipoDiEventoMusicale$="Note" Then EventoMusicale()\Durata=Tempo-InizioEvento+1
  5096.      If Modo=#EseguiGliEventiMusicaliDallEditoreSequenza
  5097.       If TipoDiEventoMusicale$="PitchBend"
  5098.        CurvaDiPicco.w=Evento*128+ValoreEvento
  5099.        DisegnaUnEventoMusicale{TipoDiEventoMusicale$,CurvaDiPicco,InizioEvento,DurataEvento,CanaleEvento,#EventoMusicaleSuonato}
  5100.       Else
  5101.        DisegnaUnEventoMusicale{TipoDiEventoMusicale$,Evento,InizioEvento,DurataEvento,CanaleEvento,#EventoMusicaleSuonato}
  5102.       EndIf
  5103.      EndIf
  5104.      If InizioEvento+DurataEvento-1>=Tempo
  5105.       EventoMusicale()\Stato & %11110111
  5106.       EventoMusicale()\Stato | #EventoMusicaleTerminato
  5107.      EndIf
  5108.     EndIf
  5109.     EventoMusicaleTerminato.b=StatoEvento & #EventoMusicaleTerminato
  5110.     If EventoMusicaleTerminato=#EventoMusicaleTerminato
  5111.      If Modo=#EseguiGliEventiMusicaliDallEditoreSequenza
  5112.       If TipoDiEventoMusicale$="PitchBend"
  5113.        CurvaDiPicco=Evento*128+ValoreEvento
  5114.        DisegnaUnEventoMusicale{TipoDiEventoMusicale$,CurvaDiPicco,InizioEvento,DurataEvento,CanaleEvento,StatoEvento}
  5115.       Else
  5116.        DisegnaUnEventoMusicale{TipoDiEventoMusicale$,Evento,InizioEvento,DurataEvento,CanaleEvento,StatoEvento}
  5117.       EndIf
  5118.      EndIf
  5119.      EventoMusicale()\Stato & %11101111
  5120.     EndIf
  5121.    Wend
  5122.   Until TastoPremuto$=TastoEsc$ OR TastoPremuto$=" "
  5123.   If Modo=#EseguiGliEventiMusicaliDallaFinestraPrincipale
  5124.    Sequenza()\Durata=Tempo-Sequenza()\Inizio+1
  5125.   EndIf
  5126.   If Modo=#EseguiGliEventiMusicaliDallEditoreSequenza
  5127.    DurataSequenza=Tempo+1
  5128.   EndIf
  5129.   ResetList EventoMusicale()
  5130.   While NextItem(EventoMusicale())=True
  5131.    EventoMusicale()\Stato & %11100111
  5132.   Wend
  5133.  Else
  5134.   EZRequest "AmySequencer message","You must select a sequence first","OK"
  5135.  EndIf
  5136. End Statement
  5137.  
  5138. Statement AggiungiUnaNotaDallaTastiera{Nota$}
  5139. SHARED AreaInvisibileDelleNote
  5140. SHARED CanaleSelezionato
  5141. SHARED DurataSequenza
  5142. SHARED EventiMusicali
  5143. SHARED EventoMusicale()
  5144. SHARED LarghezzaEventoBase
  5145. SHARED NotaSuonata
  5146. SHARED OttavaSelezionata
  5147. SHARED PuntoDiInserimento
  5148. SHARED ScalaEventiMusicali
  5149. SHARED SequenzaSelezionata
  5150. SHARED ValoreEventoBase
  5151.  Select Nota$
  5152.  Case "C1"
  5153.   Nota.b=0
  5154.  Case "C#1"
  5155.   Nota=1
  5156.  Case "D1"
  5157.   Nota=2
  5158.  Case "D#1"
  5159.   Nota=3
  5160.  Case "E1"
  5161.   Nota=4
  5162.  Case "F1"
  5163.   Nota=5
  5164.  Case "F#1"
  5165.   Nota=6
  5166.  Case "G1"
  5167.   Nota=7
  5168.  Case "G#1"
  5169.   Nota=8
  5170.  Case "A1"
  5171.   Nota=9
  5172.  Case "A#1"
  5173.   Nota=10
  5174.  Case "B1"
  5175.   Nota=11
  5176.  Case "C2"
  5177.   Nota=12
  5178.  Case "C#2"
  5179.   Nota=13
  5180.  Case "D2"
  5181.   Nota=14
  5182.  Case "D#2"
  5183.   Nota=15
  5184.  Case "E2"
  5185.   Nota=16
  5186.  Case "F2"
  5187.   Nota=17
  5188.  Case "F#2"
  5189.   Nota=18
  5190.  Case "G2"
  5191.   Nota=19
  5192.  Case "G#2"
  5193.   Nota=20
  5194.  Case "A2"
  5195.   Nota=21
  5196.  Case "A#2"
  5197.   Nota=22
  5198.  Case "B2"
  5199.   Nota=23
  5200.  End Select
  5201.  Nota+OttavaSelezionata*12:Nota=Min(Nota,127)
  5202.  If CanaleSelezionato>0
  5203.   LastItem EventoMusicale()
  5204.   If AddItem(EventoMusicale())=True
  5205.    EventiMusicali+1
  5206.    EventoMusicale()\Tipo="Note"
  5207.    EventoMusicale()\Evento=Nota
  5208.    EventoMusicale()\Inizio=PuntoDiInserimento
  5209.    EventoMusicale()\Canale=CanaleSelezionato
  5210.    EventoMusicale()\Sequenza=SequenzaSelezionata
  5211.    EventoMusicale()\Stato=#EventoMusicaleNonSelezionato
  5212.    EventoMusicale()\Durata=LarghezzaEventoBase
  5213.    EventoMusicale()\Valore=ValoreEventoBase
  5214.    If NotaSuonata\Stato=True
  5215.     Nota.b=NotaSuonata\Evento
  5216.     VelocitaNota.b=NotaSuonata\Valore
  5217.     CanaleNota.b=NotaSuonata\Canale
  5218.     SmettiDiSuonareLaNota{Nota,VelocitaNota,CanaleNota,#EseguiGliEventiMusicaliDallEditoreSequenza}
  5219.    EndIf
  5220.    NotaSuonata\Evento=EventoMusicale()\Evento,EventoMusicale()\Inizio,EventoMusicale()\Canale,EventoMusicale()\Sequenza
  5221.    NotaSuonata\Durata=EventoMusicale()\Durata,EventoMusicale()\Valore
  5222.    SuonaLaNota{NotaSuonata\Evento,NotaSuonata\Valore,NotaSuonata\Canale,#EseguiGliEventiMusicaliDallEditoreSequenza}
  5223.    NotaSuonata\Stato=True
  5224.    PuntoDiInserimento+LarghezzaEventoBase
  5225.    DurataSequenza=Max(DurataSequenza,EventoMusicale()\Inizio+EventoMusicale()\Durata)
  5226.   Else
  5227.    EZRequest "AmySequencer message","You have used all the available events","OK"
  5228.   EndIf
  5229.  Else
  5230.   EZRequest "AmySequencer message","You must select a channel first","OK"
  5231.  EndIf
  5232. End Statement
  5233.  
  5234. ;-------------------------------------------------------------
  5235. ;questa procedura permette di editare la sequenza selezionata
  5236. ;this procedure permits to edit the selected sequence
  5237. ;-----------------------------------------------------
  5238. Statement EditoreSequenza{}
  5239. SHARED AltezzaFonte
  5240. SHARED AltezzaInternaFinestraEditoreSequenza
  5241. SHARED AltezzaSchermo
  5242. SHARED AreaInvisibileDelleNote
  5243. SHARED AreaInvisibileDelTempo
  5244. SHARED AreaVisibileDeiValori
  5245. SHARED Battiti
  5246. SHARED CanaleSelezionato
  5247. SHARED ColoriOriginali
  5248. SHARED DurataSequenza
  5249. SHARED EventiMusicali
  5250. SHARED EventiMusicaliSelezionati
  5251. SHARED EventoMusicale()
  5252. SHARED LarghezzaInternaFinestraEditoreSequenza
  5253. SHARED LarghezzaEventoBase
  5254. SHARED LarghezzaSchermo
  5255. SHARED MIDIAttivato
  5256. SHARED Misure
  5257. SHARED MostraEventiMusicaliDelloStessoTipoDaSoli
  5258. SHARED MostraNuovoValore
  5259. SHARED NotaSuonata
  5260. SHARED NoteSuonate
  5261. SHARED OttavaSelezionata
  5262. SHARED PeriFreq()
  5263. SHARED PrimaVoltaNellEditoreSequenza
  5264. SHARED PuntoDiInserimento
  5265. SHARED ScalaEventiMusicali
  5266. SHARED Sequenza()
  5267. SHARED TastoDelTopoCliccato
  5268. SHARED TastoBackspace$
  5269. SHARED TastoCursoreDestra$
  5270. SHARED TastoCursoreGiu$
  5271. SHARED TastoCursoreSinistra$
  5272. SHARED TastoCursoreSu$
  5273. SHARED TastoEsc$
  5274. SHARED TicPerCinquantesimoDiSecondo
  5275. SHARED TipoDiEventoBase$
  5276. SHARED TipoDiNota()
  5277. SHARED XInizioAreaVisibile
  5278. SHARED XLunSlider
  5279. SHARED XTopo
  5280. SHARED YInizioAreaVisibile
  5281. SHARED YLunSlider
  5282. SHARED YTopo
  5283.  
  5284. ;-----------------------------------------------------------------------
  5285. ;imposta il colore del testo nei menu' a quello piu' chiaro disponibile
  5286. ;sets text menu colour to the brightest available
  5287. ;-------------------------------------------------
  5288.  MenuColour 3
  5289.  
  5290.  XPosF.w=0:YPosF.w=AltezzaFonte+3:XLunF.w=LarghezzaSchermo:YLunF.w=AltezzaSchermo-(AltezzaFonte+3)
  5291.  TipoFinestra.l=#GadgetNascondiFinestra+#GadgetChiudiFinestra+#FinestraConMemoriaSfondo+#FinestraAttivata
  5292.  DurataSequenza=Max(Sequenza()\Durata,192*4.0/Misure*Battiti)
  5293.  EventiMusicali=Sequenza()\EventiMusicali
  5294.  EventiMusicaliSelezionati=Sequenza()\EventiMusicaliSelezionati
  5295.  Window #FinestraEditoreSequenza,XPosF,YPosF,XLunF,YLunF,TipoFinestra,"",-1,-1
  5296.  MostraTitoloFinestraEditoreSequenza{}
  5297.  LarghezzaInternaFinestraEditoreSequenza=InnerWidth
  5298.  AltezzaInternaFinestraEditoreSequenza=InnerHeight
  5299.  CloseWindow #FinestraEditoreSequenza
  5300.  
  5301.  AreaInvisibileDelleNote.b=128-(AltezzaInternaFinestraEditoreSequenza-8-8)/8
  5302.  
  5303.  AreaVisibileDeiValori.w=(128-AreaInvisibileDelleNote)*8-1-7
  5304.  
  5305.  XLunSlider=16
  5306.  YLunSlider=AltezzaInternaFinestraEditoreSequenza-8-8
  5307.  ImpostaSlider{1,0,0,"VERTICAL",0,#ListaGadgetEditoreSequenza}
  5308.  
  5309.  XLunSlider=LarghezzaInternaFinestraEditoreSequenza-16
  5310.  YLunSlider=8
  5311.  ImpostaSlider{2,16,AltezzaInternaFinestraEditoreSequenza-8-8,"HORIZONTAL",0,#ListaGadgetEditoreSequenza}
  5312.  
  5313.  Window #FinestraEditoreSequenza,XPosF,YPosF,XLunF,YLunF,TipoFinestra,"",-1,-1,#ListaGadgetEditoreSequenza
  5314.  MostraTitoloFinestraEditoreSequenza{}
  5315.  
  5316. ;----------------------------------------------
  5317. ;imposta la fonte di caratteri per la finestra
  5318. ;sets the font for the window
  5319. ;-----------------------------
  5320.  WindowFont #FonteDiCaratteriTopaz8
  5321.  
  5322.  WJam #DueColoriConSfondoPieno
  5323.  
  5324.  SetZone 0,0,0,LarghezzaInternaFinestraEditoreSequenza-1,AltezzaInternaFinestraEditoreSequenza-1-8-8
  5325.  Format "00"
  5326.  For Canale.b=1 To 16
  5327.   X0Canale.w=(Canale-1)*16:Y0Canale.w=AltezzaInternaFinestraEditoreSequenza-8
  5328.   WLocate X0Canale,Y0Canale
  5329.   If Canale=CanaleSelezionato
  5330.    WColour Canale-1,16-Canale
  5331.   Else
  5332.    If ColoriOriginali=True
  5333.     WColour Canale MOD 2+1,Canale MOD 2
  5334.    Else
  5335.     WColour 10+(Canale MOD 2)*2,9+(Canale MOD 2)*2
  5336.    EndIf
  5337.   EndIf
  5338.   Print Canale
  5339.   SetZone Canale,X0Canale,Y0Canale,X0Canale+15,Y0Canale+7
  5340.  Next Canale
  5341.  Format ""
  5342.  WLocate X0Canale+16,Y0Canale
  5343.  If ColoriOriginali=True Then WColour 2,1 Else WColour 14,13
  5344.  Print "All":SetZone 17,X0Canale+16,Y0Canale,X0Canale+16+23,Y0Canale+7
  5345.  WLocate X0Canale+16+8*3,Y0Canale
  5346.  If ColoriOriginali=True Then WColour 1,0 Else WColour 15,14
  5347.  Print "None":SetZone 18,X0Canale+16+8*3,Y0Canale,X0Canale+16+8*3+8*4-1,Y0Canale+7
  5348.  WLocate X0Canale+16+8*3+8*4,Y0Canale
  5349.  If ColoriOriginali=True Then WColour 2,1 Else WColour 14,13
  5350.  Print "Toggle":SetZone 19,X0Canale+16+8*3+8*4,Y0Canale,X0Canale+16+8*3+8*4+8*6-1,Y0Canale+7
  5351.  MostraLaScalaDegliEventiMusicali{False}
  5352.  SetZone 20,0,AltezzaInternaFinestraEditoreSequenza-8-8,7,AltezzaInternaFinestraEditoreSequenza-8-8+7
  5353.  SetZone 21,8,AltezzaInternaFinestraEditoreSequenza-8-8,15,AltezzaInternaFinestraEditoreSequenza-8-8+7
  5354.  If PrimaVoltaNellEditoreSequenza=True
  5355.  
  5356. ;------------------------------------------------------------------
  5357. ;questa variabile indica l'inizio delle note nell'editore sequenza
  5358. ;this variable states the note beginning in the sequence editor
  5359. ;---------------------------------------------------------------
  5360.   YInizioAreaVisibile=127-(127-AreaInvisibileDelleNote)-#_MiddleC
  5361.  EndIf
  5362.  Repeat
  5363.   If SecondoClicDelTopo.b=False
  5364.    AreaInvisibileDelTempo=DurataSequenza-(LarghezzaInternaFinestraEditoreSequenza-16)*ScalaEventiMusicali
  5365.    AreaInvisibileDelTempo=Max(AreaInvisibileDelTempo,0)
  5366.    ImpostaMenuEditoreSequenza{}
  5367.    MostraTitoloFinestraEditoreSequenza{}
  5368.    MostraLeNoteDiSfondoConILoroNomi{}
  5369.    MostraLeBattute{}
  5370.    MostraGliEventiMusicali{}
  5371.    MostraIlPuntoDiInserimento{}
  5372.    MostraSliderEditoreSequenza{}
  5373.    SecondoClicDelTopo=True
  5374.   EndIf
  5375.   If PrimaVoltaNellEditoreSequenza=True
  5376.    MostraITastiDaUsare{}
  5377.    MostraLaMappaturaDelleNoteSullaTastiera{}
  5378.    PrimaVoltaNellEditoreSequenza=False
  5379.   EndIf
  5380.   If NotaSuonata\Stato=True
  5381.    Nota.b=NotaSuonata\Evento:FineNota.l=NotaSuonata\Durata-1
  5382.    VelocitaNota.b=NotaSuonata\Valore:CanaleNota.b=NotaSuonata\Canale
  5383.    DurataNota.l=(Timer-TempoTrascorso.l)*TicPerCinquantesimoDiSecondo
  5384.    If DurataNota>FineNota
  5385.     SmettiDiSuonareLaNota{Nota,VelocitaNota,CanaleNota,#EseguiGliEventiMusicaliDallEditoreSequenza}
  5386.     NotaSuonata\Stato=False
  5387.    EndIf
  5388.   EndIf
  5389.   If NoteSuonate>0 AND NotaSuonata\Stato=False
  5390.    If NoteSuonate=1 Then Messaggio$="There is a note" Else Messaggio$="There are "+Str$(NoteSuonate)+" notes"
  5391.    Messaggio$+" still playing:|clicking on OK you will stop "
  5392.    If NoteSuonate=1 Then Messaggio$+"this." Else Messaggio$+"these."
  5393.    EZRequest "AmySequencer message",Messaggio$,"OK"
  5394.    InterrompiTutteLeNote{#EseguiGliEventiMusicaliDallEditoreSequenza}
  5395.    NoteSuonate=0
  5396.   EndIf
  5397.   EventoFinestraEditoreSequenza.l=Event
  5398.   Select EventoFinestraEditoreSequenza
  5399.   Case #HaiPremutoUnTastoDelTopo
  5400.    XTopo=WMouseX:YTopo=WMouseY:TastoDelTopoCliccato=MButtons
  5401.    ZonaTopo.b=Zone(XTopo,YTopo)
  5402.    Select TastoDelTopoCliccato
  5403.    Case #TastoSinistroDelTopoPremuto
  5404.     Select ZonaTopo
  5405.     Case 0
  5406.      Selezione{#SelezionaUnEvento}
  5407.     Case 1
  5408.      Format "00"
  5409.      If CanaleSelezionato>0
  5410.       WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  5411.       If ColoriOriginali=True
  5412.        WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  5413.       Else
  5414.        WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  5415.       EndIf
  5416.       Print Str$(CanaleSelezionato)
  5417.      EndIf
  5418.      CanaleSelezionato=1:Selezione{#CambiaIlCanaleDegliEventiMusicaliSelezionati}
  5419.      WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  5420.      WColour CanaleSelezionato-1,16-CanaleSelezionato
  5421.      Print Str$(CanaleSelezionato)
  5422.      Format ""
  5423.     Case 2
  5424.      Format "00"
  5425.      If CanaleSelezionato>0
  5426.       WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  5427.       If ColoriOriginali=True
  5428.        WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  5429.       Else
  5430.        WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  5431.       EndIf
  5432.       Print Str$(CanaleSelezionato)
  5433.      EndIf
  5434.      CanaleSelezionato=2:Selezione{#CambiaIlCanaleDegliEventiMusicaliSelezionati}
  5435.      WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  5436.      WColour CanaleSelezionato-1,16-CanaleSelezionato
  5437.      Print Str$(CanaleSelezionato)
  5438.      Format ""
  5439.     Case 3
  5440.      Format "00"
  5441.      If CanaleSelezionato>0
  5442.       WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  5443.       If ColoriOriginali=True
  5444.        WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  5445.       Else
  5446.        WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  5447.       EndIf
  5448.       Print Str$(CanaleSelezionato)
  5449.      EndIf
  5450.      CanaleSelezionato=3:Selezione{#CambiaIlCanaleDegliEventiMusicaliSelezionati}
  5451.      WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  5452.      WColour CanaleSelezionato-1,16-CanaleSelezionato
  5453.      Print Str$(CanaleSelezionato)
  5454.      Format ""
  5455.     Case 4
  5456.      Format "00"
  5457.      If CanaleSelezionato>0
  5458.       WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  5459.       If ColoriOriginali=True
  5460.        WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  5461.       Else
  5462.        WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  5463.       EndIf
  5464.       Print Str$(CanaleSelezionato)
  5465.      EndIf
  5466.      CanaleSelezionato=4:Selezione{#CambiaIlCanaleDegliEventiMusicaliSelezionati}
  5467.      WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  5468.      WColour CanaleSelezionato-1,16-CanaleSelezionato:Print Str$(CanaleSelezionato)
  5469.      Format ""
  5470.     Case 5
  5471.      Format "00"
  5472.      If CanaleSelezionato>0
  5473.       WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  5474.       If ColoriOriginali=True
  5475.        WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  5476.       Else
  5477.        WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  5478.       EndIf
  5479.       Print Str$(CanaleSelezionato)
  5480.      EndIf
  5481.      CanaleSelezionato=5:Selezione{#CambiaIlCanaleDegliEventiMusicaliSelezionati}
  5482.      WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  5483.      WColour CanaleSelezionato-1,16-CanaleSelezionato
  5484.      Print Str$(CanaleSelezionato)
  5485.      Format ""
  5486.     Case 6
  5487.      Format "00"
  5488.      If CanaleSelezionato>0
  5489.       WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  5490.       If ColoriOriginali=True
  5491.        WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  5492.       Else
  5493.        WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  5494.       EndIf
  5495.       Print Str$(CanaleSelezionato)
  5496.      EndIf
  5497.      CanaleSelezionato=6:Selezione{#CambiaIlCanaleDegliEventiMusicaliSelezionati}
  5498.      WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  5499.      WColour CanaleSelezionato-1,16-CanaleSelezionato
  5500.      Print Str$(CanaleSelezionato)
  5501.      Format ""
  5502.     Case 7
  5503.      Format "00"
  5504.      If CanaleSelezionato>0
  5505.       WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  5506.       If ColoriOriginali=True
  5507.        WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  5508.       Else
  5509.        WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  5510.       EndIf
  5511.       Print Str$(CanaleSelezionato)
  5512.      EndIf
  5513.      CanaleSelezionato=7:Selezione{#CambiaIlCanaleDegliEventiMusicaliSelezionati}
  5514.      WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  5515.      WColour CanaleSelezionato-1,16-CanaleSelezionato
  5516.      Print Str$(CanaleSelezionato)
  5517.      Format ""
  5518.     Case 8
  5519.      Format "00"
  5520.      If CanaleSelezionato>0
  5521.       WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  5522.       If ColoriOriginali=True
  5523.        WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  5524.       Else
  5525.        WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  5526.       EndIf
  5527.       Print Str$(CanaleSelezionato)
  5528.      EndIf
  5529.      CanaleSelezionato=8:Selezione{#CambiaIlCanaleDegliEventiMusicaliSelezionati}
  5530.      WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  5531.      WColour CanaleSelezionato-1,16-CanaleSelezionato
  5532.      Print Str$(CanaleSelezionato)
  5533.      Format ""
  5534.     Case 9
  5535.      Format "00"
  5536.      If CanaleSelezionato>0
  5537.       WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  5538.       If ColoriOriginali=True
  5539.        WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  5540.       Else
  5541.        WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  5542.       EndIf
  5543.       Print Str$(CanaleSelezionato)
  5544.      EndIf
  5545.      CanaleSelezionato=9:Selezione{#CambiaIlCanaleDegliEventiMusicaliSelezionati}
  5546.      WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  5547.      WColour CanaleSelezionato-1,16-CanaleSelezionato
  5548.      Print Str$(CanaleSelezionato)
  5549.      Format ""
  5550.     Case 10
  5551.      Format "00"
  5552.      If CanaleSelezionato>0
  5553.       WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  5554.       If ColoriOriginali=True
  5555.        WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  5556.       Else
  5557.        WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  5558.       EndIf
  5559.       Print Str$(CanaleSelezionato)
  5560.      EndIf
  5561.      CanaleSelezionato=10:Selezione{#CambiaIlCanaleDegliEventiMusicaliSelezionati}
  5562.      WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  5563.      WColour CanaleSelezionato-1,16-CanaleSelezionato
  5564.      Print Str$(CanaleSelezionato)
  5565.      Format ""
  5566.     Case 11
  5567.      Format "00"
  5568.      If CanaleSelezionato>0
  5569.       WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  5570.       If ColoriOriginali=True
  5571.        WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  5572.       Else
  5573.        WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  5574.       EndIf
  5575.       Print Str$(CanaleSelezionato)
  5576.      EndIf
  5577.      CanaleSelezionato=11:Selezione{#CambiaIlCanaleDegliEventiMusicaliSelezionati}
  5578.      WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  5579.      WColour CanaleSelezionato-1,16-CanaleSelezionato
  5580.      Print Str$(CanaleSelezionato)
  5581.      Format ""
  5582.     Case 12
  5583.      Format "00"
  5584.      If CanaleSelezionato>0
  5585.       WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  5586.       If ColoriOriginali=True
  5587.        WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  5588.       Else
  5589.        WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  5590.       EndIf
  5591.       Print Str$(CanaleSelezionato)
  5592.      EndIf
  5593.      CanaleSelezionato=12:Selezione{#CambiaIlCanaleDegliEventiMusicaliSelezionati}
  5594.      WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  5595.      WColour CanaleSelezionato-1,16-CanaleSelezionato
  5596.      Print Str$(CanaleSelezionato)
  5597.      Format ""
  5598.     Case 13
  5599.      Format "00"
  5600.      If CanaleSelezionato>0
  5601.       WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  5602.       If ColoriOriginali=True
  5603.        WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  5604.       Else
  5605.        WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  5606.       EndIf
  5607.       Print Str$(CanaleSelezionato)
  5608.      EndIf
  5609.      CanaleSelezionato=13:Selezione{#CambiaIlCanaleDegliEventiMusicaliSelezionati}
  5610.      WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  5611.      WColour CanaleSelezionato-1,16-CanaleSelezionato
  5612.      Print Str$(CanaleSelezionato)
  5613.      Format ""
  5614.     Case 14
  5615.      Format "00"
  5616.      If CanaleSelezionato>0
  5617.       WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  5618.       If ColoriOriginali=True
  5619.        WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  5620.       Else
  5621.        WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  5622.       EndIf
  5623.       Print Str$(CanaleSelezionato)
  5624.      EndIf
  5625.      CanaleSelezionato=14:Selezione{#CambiaIlCanaleDegliEventiMusicaliSelezionati}
  5626.      WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  5627.      WColour CanaleSelezionato-1,16-CanaleSelezionato
  5628.      Print Str$(CanaleSelezionato)
  5629.      Format ""
  5630.     Case 15
  5631.      Format "00"
  5632.      If CanaleSelezionato>0
  5633.       WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  5634.       If ColoriOriginali=True
  5635.        WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  5636.       Else
  5637.        WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  5638.       EndIf
  5639.       Print Str$(CanaleSelezionato)
  5640.      EndIf
  5641.      CanaleSelezionato=15:Selezione{#CambiaIlCanaleDegliEventiMusicaliSelezionati}
  5642.      WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  5643.      WColour CanaleSelezionato-1,16-CanaleSelezionato
  5644.      Print Str$(CanaleSelezionato)
  5645.      Format ""
  5646.     Case 16
  5647.      Format "00"
  5648.      If CanaleSelezionato>0
  5649.       WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  5650.       If ColoriOriginali=True
  5651.        WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  5652.       Else
  5653.        WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  5654.       EndIf
  5655.       Print Str$(CanaleSelezionato)
  5656.      EndIf
  5657.      CanaleSelezionato=16:Selezione{#CambiaIlCanaleDegliEventiMusicaliSelezionati}
  5658.      WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  5659.      WColour CanaleSelezionato-1,16-CanaleSelezionato
  5660.      Print Str$(CanaleSelezionato)
  5661.      Format ""
  5662.     Case 17
  5663.      Selezione{#SelezionaTuttiGliEventiMusicali}
  5664.     Case 18
  5665.      Selezione{#DeselezionaTuttiGliEventiMusicali}
  5666.     Case 19
  5667.      Selezione{#InvertiLaSelezioneDiTuttiGliEventiMusicali}
  5668.     Case 20
  5669.      ScalaEventiMusicali/2:If ScalaEventiMusicali=0 Then ScalaEventiMusicali=64
  5670.      MostraLaScalaDegliEventiMusicali{True}
  5671.     Case 21
  5672.      ScalaEventiMusicali+ScalaEventiMusicali:If ScalaEventiMusicali=128 Then ScalaEventiMusicali=1
  5673.      MostraLaScalaDegliEventiMusicali{True}
  5674.     End Select
  5675.     TempoTrascorso.l=Timer
  5676.     SecondoClicDelTopo=False
  5677.    Case #TastoSinistroDelTopoRilasciato
  5678.     If Timer-TempoTrascorso>49 AND ZonaTopo=0
  5679.      Selezione{#SelezionaGliEventiMusicaliUguali}
  5680.      SecondoClicDelTopo=False
  5681.     Else
  5682.      SecondoClicDelTopo=True
  5683.     EndIf
  5684.    End Select
  5685. ;  Case #HaiPremutoUnGadget
  5686. ;   Select GadgetHit
  5687. ;   Case 1
  5688. ;    AltezzaSlider.w=AltezzaInternaFinestraEditoreSequenza-8-8
  5689. ;    YInizioAreaVisibile=ValoreSlider{1,AreaInvisibileDelleNote,AltezzaSlider,"VERTICAL",#ListaGadgetEditoreSequenza}
  5690. ;   Case 2
  5691. ;    LunghezzaSlider.w=LarghezzaInternaFinestraEditoreSequenza-16
  5692. ;    XInizioAreaVisibile=ValoreSlider{2,AreaInvisibileDelTempo,LunghezzaSlider,"HORIZONTAL",#ListaGadgetEditoreSequenza}
  5693. ;    XInizioAreaVisibile=Max(XInizioAreaVisibile,0)
  5694. ;   End Select
  5695.   Case #HaiRilasciatoUnGadget
  5696.    Select GadgetHit
  5697.    Case 1
  5698.     AltezzaSlider.w=AltezzaInternaFinestraEditoreSequenza-8-8
  5699.     YInizioAreaVisibile=ValoreSlider{1,AreaInvisibileDelleNote,AltezzaSlider,"VERTICAL",#ListaGadgetEditoreSequenza}
  5700.    Case 2
  5701.     LunghezzaSlider.w=LarghezzaInternaFinestraEditoreSequenza-16
  5702.     XInizioAreaVisibile=ValoreSlider{2,AreaInvisibileDelTempo,LunghezzaSlider,"HORIZONTAL",#ListaGadgetEditoreSequenza}
  5703.     XInizioAreaVisibile=Max(XInizioAreaVisibile,0)
  5704.    End Select
  5705.    SecondoClicDelTopo=False
  5706.   Case #HaiAttivatoIlMenu
  5707.    If MenuHit=0 AND ItemHit=0 Then EseguiGliEventiMusicali{#EseguiGliEventiMusicaliDallEditoreSequenza}
  5708.    If MenuHit=0 AND ItemHit=1 Then RegistraGliEventiMusicali{#EseguiGliEventiMusicaliDallEditoreSequenza}
  5709.  
  5710.    If MenuHit=1 AND ItemHit=0 Then TipoDiEventoBase$="Note"
  5711.    If MenuHit=1 AND ItemHit=1 Then TipoDiEventoBase$="Program"
  5712.    If MenuHit=1 AND ItemHit=2 Then TipoDiEventoBase$="Control"
  5713.    If MenuHit=1 AND ItemHit=3 Then TipoDiEventoBase$="PolyAftertouch"
  5714.    If MenuHit=1 AND ItemHit=4 Then TipoDiEventoBase$="MonoAftertouch"
  5715.    If MenuHit=1 AND ItemHit=5 Then TipoDiEventoBase$="PitchBend"
  5716.    If MenuHit=1 AND ItemHit=6 Then TipoDiEventoBase$="Tempo"
  5717.    If MenuHit=1 AND ItemHit=7 Then TipoDiEventoBase$="BPM"
  5718.    If MenuHit=1 AND ItemHit=8 Then MostraEventiMusicaliDelloStessoTipoDaSoli=NOT MostraEventiMusicaliDelloStessoTipoDaSoli
  5719.  
  5720.    If MenuHit=2 AND ItemHit=0 Then CambiaLEventoBase{}
  5721.    If MenuHit=2 AND ItemHit=1 Then MostraNuovoValoreEvento=NOT MostraNuovoValore
  5722.  
  5723.    If MenuHit=3 AND ItemHit=0 Then MostraITastiDaUsare{}
  5724.    If MenuHit=3 AND ItemHit=1 Then MostraLaMappaturaDelleNoteSullaTastiera{}
  5725.  
  5726.    SecondoClicDelTopo=False
  5727.   Case #HaiChiusoLaFinestra
  5728.    EsciDallEditoreSequenza.b=True
  5729.   Case #HaiPremutoUnTasto
  5730.    TastoPremuto$=LCase$(Inkey$):TastoRiga.w=RawKey
  5731.    If TastoPremuto$=TastoEsc$ Then EsciDallEditoreSequenza=True
  5732.    Select TastoRiga
  5733.    Case 2
  5734.     Nota$="C#2"
  5735.    Case 3
  5736.     Nota$="D#2"
  5737.    Case 5
  5738.     Nota$="F#2"
  5739.    Case 6
  5740.     Nota$="G#2"
  5741.    Case 7
  5742.     Nota$="A#2"
  5743.    Case 16
  5744.     Nota$="C2"
  5745.    Case 17
  5746.     Nota$="D2"
  5747.    Case 18
  5748.     Nota$="E2"
  5749.    Case 19
  5750.     Nota$="F2"
  5751.    Case 20
  5752.     Nota$="G2"
  5753.    Case 21
  5754.     Nota$="A2"
  5755.    Case 22
  5756.     Nota$="B2"
  5757.    Case 33
  5758.     Nota$="C#1"
  5759.    Case 34
  5760.     Nota$="D#1"
  5761.    Case 36
  5762.     Nota$="F#1"
  5763.    Case 37
  5764.     Nota$="G#1"
  5765.    Case 38
  5766.     Nota$="A#1"
  5767.    Case 49
  5768.     Nota$="C1"
  5769.    Case 50
  5770.     Nota$="D1"
  5771.    Case 51
  5772.     Nota$="E1"
  5773.    Case 52
  5774.     Nota$="F1"
  5775.    Case 53
  5776.     Nota$="G1"
  5777.    Case 54
  5778.     Nota$="A1"
  5779.    Case 55
  5780.     Nota$="B1"
  5781.    Case 80
  5782.     OttavaSelezionata=0
  5783.    Case 81
  5784.     OttavaSelezionata=1
  5785.    Case 82
  5786.     OttavaSelezionata=2
  5787.    Case 83
  5788.     OttavaSelezionata=3
  5789.    Case 84
  5790.     OttavaSelezionata=4
  5791.    Case 85
  5792.     OttavaSelezionata=5
  5793.    Case 86
  5794.     OttavaSelezionata=6
  5795.    Case 87
  5796.     OttavaSelezionata=7
  5797.    Case 88
  5798.     OttavaSelezionata=8
  5799.    Case 89
  5800.     OttavaSelezionata=9
  5801.    Default
  5802.     TastoRiga=0
  5803.    End Select
  5804.    If TastoRiga>0
  5805.     If TastoRiga<80
  5806.      AggiungiUnaNotaDallaTastiera{Nota$}
  5807.     Else
  5808.      YInizioAreaVisibile=Max(127-(127-AreaInvisibileDelleNote)-OttavaSelezionata*12,0)
  5809.     EndIf
  5810.    EndIf
  5811.    TastiShiftPremuti.b=(Qualifier-$8000) & %11
  5812.    If EventiMusicaliSelezionati>0
  5813.     If TastiShiftPremuti>0
  5814.      Select TastoPremuto$
  5815.      Case TastoBackspace$
  5816.       Selezione{#EliminaGliEventiMusicaliSelezionati}
  5817.      Case TastoCursoreSu$
  5818.       If TipoDiEventoBase$="Note" Then Selezione{#AlzaDiUnOttavaLeNoteSelezionate}
  5819.       If TipoDiEventoBase$="Program" Then Selezione{#AggiungiDieciAgliEventiMusicaliSelezionati}
  5820.       If TipoDiEventoBase$="Control" Then Selezione{#AggiungiDieciAgliEventiMusicaliSelezionati}
  5821.       If TipoDiEventoBase$="PolyAftertouch" Then Selezione{#AggiungiDieciAgliEventiMusicaliSelezionati}
  5822.       If TipoDiEventoBase$="MonoAftertouch" Then Selezione{#AggiungiDieciAgliEventiMusicaliSelezionati}
  5823.       If TipoDiEventoBase$="Tempo" Then Selezione{#AggiungiUnaMisuraAlTempoSelezionato}
  5824.       If TipoDiEventoBase$="BPM" Then Selezione{#AggiungiDieciAgliEventiMusicaliSelezionati}
  5825.      Case TastoCursoreGiu$
  5826.       If TipoDiEventoBase$="Note" Then Selezione{#AbbassaDiUnOttavaLeNoteSelezionate}
  5827.       If TipoDiEventoBase$="Program" Then Selezione{#SottraiDieciAgliEventiMusicaliSelezionati}
  5828.       If TipoDiEventoBase$="Control" Then Selezione{#SottraiDieciAgliEventiMusicaliSelezionati}
  5829.       If TipoDiEventoBase$="PolyAftertouch" Then Selezione{#SottraiDieciAgliEventiMusicaliSelezionati}
  5830.       If TipoDiEventoBase$="MonoAftertouch" Then Selezione{#SottraiDieciAgliEventiMusicaliSelezionati}
  5831.       If TipoDiEventoBase$="Tempo" Then Selezione{#TogliUnaMisuraAlTempoSelezionato}
  5832.       If TipoDiEventoBase$="BPM" Then Selezione{#SottraiDieciAgliEventiMusicaliSelezionati}
  5833.      Case TastoCursoreDestra$
  5834.       If TipoDiEventoBase$="Note" Then Selezione{#AllungaLaDurataDelleNoteSelezionate}
  5835.      Case TastoCursoreSinistra$
  5836.       If TipoDiEventoBase$="Note" Then Selezione{#RiduciLaDurataDelleNoteSelezionate}
  5837.      End Select
  5838.     Else
  5839.      Select TastoPremuto$
  5840.      Case TastoBackspace$
  5841.       If LastItem(EventoMusicale())=True
  5842.        If EventoMusicale()\Stato & #EventoMusicaleSelezionato=#EventoMusicaleSelezionato Then EventiMusicaliSelezionati-1
  5843.        DurataEventoMusicale.l=Max(EventoMusicale()\Durata,LarghezzaEventoBase)
  5844.        DurataSequenza-DurataEventoMusicale
  5845.        XInizioAreaVisibile-DurataEventoMusicale
  5846.        XInizioAreaVisibile=Max(XInizioAreaVisibile,0)
  5847.        KillItem EventoMusicale():EventiMusicali-1
  5848.       EndIf
  5849.      Case TastoCursoreSu$
  5850.       If TipoDiEventoBase$="Tempo"
  5851.        Selezione{#AggiungiUnBattitoAlTempoSelezionato}
  5852.       Else
  5853.        Selezione{#AlzaDiUnoGliEventiMusicaliSelezionati}
  5854.       EndIf
  5855.      Case TastoCursoreGiu$
  5856.       If TipoDiEventoBase$="Tempo"
  5857.        Selezione{#TogliUnBattitoAlTempoSelezionato}
  5858.       Else
  5859.        Selezione{#AbbassaDiUnoGliEventiMusicaliSelezionati}
  5860.       EndIf
  5861.      Case TastoCursoreDestra$
  5862.       Selezione{#SpostaAvantiNelTempoGliEventiMusicaliSelezionati}
  5863.      Case TastoCursoreSinistra$
  5864.       Selezione{#SpostaIndietroNelTempoGliEventiMusicaliSelezionati}
  5865.      End Select
  5866.     EndIf
  5867.    Else
  5868.     If TastiShiftPremuti>0
  5869.      Select TastoPremuto$
  5870.      Case TastoBackspace$
  5871.       If LastItem(EventoMusicale())=True
  5872.        If EventoMusicale()\Stato & #EventoMusicaleSelezionato=#EventoMusicaleSelezionato Then EventiMusicaliSelezionati-1
  5873.        DurataEventoMusicale=Max(EventoMusicale()\Durata,LarghezzaEventoBase)
  5874.        DurataSequenza-DurataEventoMusicale
  5875.        XInizioAreaVisibile-DurataEventoMusicale
  5876.        XInizioAreaVisibile=Max(XInizioAreaVisibile,0)
  5877.        KillItem EventoMusicale():EventiMusicali-1
  5878.       EndIf
  5879.      Case TastoCursoreDestra$
  5880.       PuntoDiInserimento+LarghezzaEventoBase
  5881.       PuntoDiInserimento=Min(PuntoDiInserimento,DurataSequenza)
  5882.      Case TastoCursoreSinistra$
  5883.       PuntoDiInserimento-LarghezzaEventoBase
  5884.       PuntoDiInserimento=Max(PuntoDiInserimento,0)
  5885.      End Select
  5886.     Else
  5887.      Select TastoPremuto$
  5888.      Case TastoBackspace$
  5889.       If LastItem(EventoMusicale())=True
  5890.        If EventoMusicale()\Stato & #EventoMusicaleSelezionato=#EventoMusicaleSelezionato Then EventiMusicaliSelezionati-1
  5891.        DurataEventoMusicale=Max(EventoMusicale()\Durata,LarghezzaEventoBase)
  5892.        DurataSequenza-DurataEventoMusicale
  5893.        XInizioAreaVisibile-DurataEventoMusicale
  5894.        XInizioAreaVisibile=Max(XInizioAreaVisibile,0)
  5895.        KillItem EventoMusicale():EventiMusicali-1
  5896.       EndIf
  5897.      Case TastoCursoreSu$
  5898.       If YInizioAreaVisibile>0 Then YInizioAreaVisibile-1
  5899.      Case TastoCursoreGiu$
  5900.       If YInizioAreaVisibile<AreaInvisibileDelleNote Then YInizioAreaVisibile+1
  5901.      Case TastoCursoreDestra$
  5902.       XInizioAreaVisibile+LarghezzaEventoBase
  5903.       XInizioAreaVisibile=Min(XInizioAreaVisibile,AreaInvisibileDelTempo)
  5904.      Case TastoCursoreSinistra$
  5905.       XInizioAreaVisibile-LarghezzaEventoBase
  5906.       XInizioAreaVisibile=Max(XInizioAreaVisibile,0)
  5907.      End Select
  5908.     EndIf
  5909.    EndIf
  5910.    If TastoPremuto$=" "
  5911.     ResetList EventoMusicale()
  5912.     While NextItem(EventoMusicale())
  5913.      If EventoMusicale()\Inizio>=PuntoDiInserimento
  5914.       EventoMusicale()\Inizio+LarghezzaEventoBase
  5915.      EndIf
  5916.     Wend
  5917.     PuntoDiInserimento+LarghezzaEventoBase
  5918.     DurataSequenza+LarghezzaEventoBase
  5919.    EndIf
  5920.    SecondoClicDelTopo=False
  5921.   End Select
  5922.  Until EsciDallEditoreSequenza=True
  5923.  Sequenza()\EventiMusicali=EventiMusicali
  5924.  Sequenza()\EventiMusicaliSelezionati=EventiMusicaliSelezionati
  5925.  Sequenza()\Durata=DurataSequenza
  5926.  CloseWindow #FinestraEditoreSequenza
  5927.  Use Window #FinestraPrincipale
  5928.  WJam #UnColoreConSfondoTrasparente
  5929. End Statement
  5930.  
  5931. ;------------------------------------------------------------------------------
  5932. ;questa procedura elimina tutti gli eventi musicali della sequenza selezionata
  5933. ;this procedure deletes all the events of the selected  sequence
  5934. ;-----------------------------------------------------------------
  5935. Statement EliminaTuttiGliEventiMusicaliDellaSequenza{}
  5936. SHARED EventoMusicale()
  5937. SHARED Sequenza()
  5938.  If Sequenza()\EventiMusicali>0
  5939.   ResetList EventoMusicale()
  5940.   While NextItem(EventoMusicale())=True
  5941.    If EventoMusicale()\Sequenza=Sequenza
  5942.     If EventoMusicale()\Stato & #EventoMusicaleSelezionato=#EventoMusicaleSelezionato
  5943.      Sequenza()\EventiMusicaliSelezionati-1
  5944.     EndIf
  5945.     Sequenza()\EventiMusicali-1
  5946.     KillItem EventoMusicale()
  5947.    EndIf
  5948.   Wend
  5949.  EndIf
  5950. End Statement
  5951.  
  5952. ;-----------------------------------------------------------
  5953. ;questa procedura cambia il nome della sequenza selezionata
  5954. ;this procedure change the selected sequence's name
  5955. ;---------------------------------------------------
  5956. Statement CambiaIlNomeDellaSequenzaSelezionata{}
  5957. SHARED Sequenza()
  5958. SHARED SequenzaSelezionata
  5959.  Use Window #FinestraPrincipale
  5960.  WJam #DueColoriConSfondoPieno
  5961.  WLocate 0,0:WColour 0,0:Print SPACE$(80)
  5962.  WLocate 0,0:WColour 3:Print "Please type the new name for the sequence>"
  5963.  NuovoNomeDellaSequenzaSelezionata$=StripLead$(StripTrail$(Edit$("Sequence "+Str$(SequenzaSelezionata),39),Asc(" ")),Asc(" "))
  5964.  If NuovoNomeDellaSequenzaSelezionata$<>"" Then Sequenza()\Nome=NuovoNomeDellaSequenzaSelezionata$
  5965.  WJam #UnColoreConSfondoTrasparente
  5966. End Statement
  5967.  
  5968. ;---------------------------------------------
  5969. ;questa procedura mostra la sequenza indicata
  5970. ;this procedure shows the stated sequence
  5971. ;-----------------------------------------
  5972. Statement MostraSequenza{Nome$,Inizio.l,Durata.l,Traccia,EventiMusicali.l,ModoDisegno.b}
  5973. SHARED AltezzaInternaFinestraPrincipale
  5974. SHARED LarghezzaInternaFinestraPrincipale
  5975. SHARED Sequenza
  5976. SHARED TracceVisibili
  5977. SHARED XTracceVisibili
  5978. SHARED YTracceVisibili
  5979.  Y0.w=(Traccia-YTracceVisibili)*8:Y1.w=Y0+7
  5980.  If Y0>=8 AND Y1<8+TracceVisibili*8
  5981.   Fine.l=Inizio+Durata-1
  5982.   I.w=16+Inizio-XTracceVisibili
  5983.   F.w=16+Fine-XTracceVisibili
  5984.   If I>=16 AND I<LarghezzaInternaFinestraPrincipale
  5985.    InizioSequenzaVisibile.b=True
  5986.   Else
  5987.    InizioSequenzaVisibile=False
  5988.   EndIf
  5989.   If F>=16 AND F<LarghezzaInternaFinestraPrincipale
  5990.    FineSequenzaVisibile.b=True
  5991.   Else
  5992.    FineSequenzaVisibile=False
  5993.   EndIf
  5994.   If I<16 AND F>LarghezzaInternaFinestraPrincipale
  5995.    SequenzaVisibile.b=True
  5996.   Else
  5997.    If InizioSequenzaVisibile=True OR FineSequenzaVisibile=True
  5998.     SequenzaVisibile=True
  5999.    Else
  6000.     SequenzaVisibile=False
  6001.    EndIf
  6002.   EndIf
  6003.   If SequenzaVisibile=True
  6004.    X0Sequenza.w=Min(Max(I,16),LarghezzaInternaFinestraPrincipale-1)
  6005.    Y0Sequenza.w=Min(Max(Y0,8),AltezzaInternaFinestraPrincipale-1-8-8-4-7)
  6006.    X1Sequenza.w=Min(Max(F,16),LarghezzaInternaFinestraPrincipale-1)
  6007.    Y1Sequenza.w=Min(Max(Y1,8+7),AltezzaInternaFinestraPrincipale-1-8-8-4)
  6008.    ColoreSequenza.b=(Sequenza-1) MOD 16
  6009.    WBox X0Sequenza,Y0Sequenza,X1Sequenza,Y1Sequenza,ColoreSequenza
  6010.    If ModoDisegno=#SequenzaSelezionata
  6011.     Wline X0Sequenza,Y0,X1Sequenza,Y1,15-ColoreSequenza
  6012.     Wline X0Sequenza,Y1,X1Sequenza,Y0,15-ColoreSequenza
  6013.    EndIf
  6014.    If ModoDisegno=#SequenzaNonSelezionata
  6015.     Wline X0Sequenza+1,Y0Sequenza+1,X1Sequenza-1,Y0Sequenza+1,15-ColoreSequenza
  6016.     Wline X0Sequenza+1,Y1Sequenza-1,X1Sequenza-1,Y1Sequenza-1,15-ColoreSequenza
  6017.    EndIf
  6018.    If ModoDisegno=#SequenzaNonSelezionata
  6019.     If InizioSequenzaVisibile=True
  6020.      Wline I+1,Y0Sequenza+1,I+1,Y1Sequenza-1,15-ColoreSequenza
  6021.     EndIf
  6022.     If FineSequenzaVisibile=True
  6023.      Wline F-1,Y0Sequenza+1,F-1,Y1Sequenza-1,15-ColoreSequenza
  6024.     EndIf
  6025.    EndIf
  6026.    If Nome$="" Then Nome$="Sequence "+Str$(Sequenza)
  6027.    If I>=16 OR I<LarghezzaInternaFinestraPrincipale OR F>=16 OR F<LarghezzaInternaFinestraPrincipale
  6028.     WColour 15-ColoreSequenza,ColoreSequenza
  6029.     I=Max(I,16):F=Min(F,LarghezzaInternaFinestraPrincipale-1)
  6030.     WLocate I,Y0Sequenza:Print Left$(Nome$,(F-I+1)/8)
  6031.    EndIf
  6032.   EndIf
  6033.  EndIf
  6034. End Statement
  6035.  
  6036. ;--------------------------------------------------------------
  6037. ;questa procedura mostra le sequenze nella finestra principale
  6038. ;this procedure show the sequences in the main window
  6039. ;-----------------------------------------------------
  6040. Statement MostraLeSequenze{}
  6041. SHARED FineMotivo
  6042. SHARED LarghezzaInternaFinestraPrincipale
  6043. SHARED Sequenza
  6044. SHARED Sequenza()
  6045. SHARED SequenzaSelezionata
  6046. SHARED TracceVisibili
  6047. SHARED Traccia()
  6048. SHARED XTracceVisibili
  6049. SHARED YTracceVisibili
  6050.  FineMotivo=0
  6051.  Sequenza=0
  6052.  PushItem Sequenza()
  6053.  ResetList Sequenza()
  6054.  While NextItem(Sequenza())=True
  6055.   Sequenza+1
  6056.   TracciaSequenza.w=Sequenza()\Traccia
  6057.   If TracciaSequenza>0
  6058.    DurataSequenza.l=Sequenza()\Durata
  6059.    If DurataSequenza>0
  6060.     PosizioneSequenza.w=(TracciaSequenza-YTracceVisibili)*8
  6061.     If PosizioneSequenza>=8 AND PosizioneSequenza<8+TracceVisibili*8
  6062.      NomeSequenza$=Sequenza()\Nome
  6063.      InizioSequenza.l=Sequenza()\Inizio
  6064.      EventiMusicaliSequenza.l=Sequenza()\EventiMusicali
  6065.      If Sequenza=SequenzaSelezionata Then ModoDisegno.b=#SequenzaSelezionata Else ModoDisegno=#SequenzaNonSelezionata
  6066.      MostraSequenza{NomeSequenza$,InizioSequenza,DurataSequenza,TracciaSequenza,EventiMusicaliSequenza,ModoDisegno}
  6067.      FineMotivo=Max(FineMotivo,InizioSequenza+DurataSequenza)
  6068.     EndIf
  6069.     Traccia(TracciaSequenza-1)=True
  6070.    EndIf
  6071.   Else
  6072.    Traccia(TracciaSequenza-1)=False
  6073.   EndIf
  6074.  Wend
  6075.  PopItem Sequenza()
  6076.  For Traccia.b=1 To TracceVisibili
  6077.   If Traccia(YTracceVisibili+Traccia-1)=False
  6078.    WLocate 16,Traccia*8:WColour 3,0:Print "Track ",Str$(YTracceVisibili+Traccia)," empty"
  6079.   EndIf
  6080.  Next Traccia
  6081. End Statement
  6082.  
  6083. Statement MostraSliderFinestraPrincipale{}
  6084. SHARED AreaInvisibileDelMotivo
  6085. SHARED BattutePerMinuto
  6086. SHARED FineMotivo
  6087. SHARED LarghezzaInternaFinestraPrincipale
  6088. SHARED TracceVisibili
  6089. SHARED XTracceVisibili
  6090. SHARED YTracceVisibili
  6091. ;-------------------------------------------------------------------------
  6092. ;imposta la barra di scorrimento della velocita' di esecuzione delle note
  6093. ;sets the notes execution velocity slider
  6094. ;-----------------------------------------
  6095.  MostraSlider{1,BattutePerMinuto-10,300-9,"HORIZONTAL",#ListaGadgetPrincipale,#FinestraPrincipale}
  6096.  
  6097. ;----------------------------
  6098. ;mostra le sequenze visibili
  6099. ;shows the visible sequences
  6100. ;----------------------------
  6101.  MostraSlider{2,YTracceVisibili,#MassimoTracce-TracceVisibili,"VERTICAL",#ListaGadgetPrincipale,#FinestraPrincipale}
  6102.  
  6103. ;-------------------------------------
  6104. ;calcola l'area invisibile del motivo
  6105. ;evaluate the motive's invisible area
  6106. ;-------------------------------------
  6107.  AreaInvisibileDelMotivo=Max(FineMotivo-(LarghezzaInternaFinestraPrincipale-16),0)
  6108.  
  6109. ;----------------------------
  6110. ;mostra le sequenze visibili
  6111. ;shows the visible sequences
  6112. ;----------------------------
  6113.  MostraSlider{3,XTracceVisibili,AreaInvisibileDelMotivo,"HORIZONTAL",#ListaGadgetPrincipale,#FinestraPrincipale}
  6114.  
  6115. End Statement
  6116.  
  6117. ;*********************************************
  6118. ;Fine delle procedure ed inizio del programma
  6119. ;procedures end and program start
  6120. ;*********************************
  6121.  
  6122. ;----------------------------------------------------
  6123. ;questo programma puo' essere lanciato dal Workbench
  6124. ;this program can be launched from Workbench
  6125. ;_-------------------------------------------
  6126. WBStartup
  6127.  
  6128. BlitMode CookieMode
  6129.  
  6130. ;calculates the frequency and the AMIGA voice period for all the 128 notes
  6131. CalcolaLaFrequenzaEdIlPeriodoDelleNote{}
  6132.  
  6133. ;loads the Topaz8 font
  6134. CaricaLaFonteDiCaratteriTopaz8{}
  6135.  
  6136. ;sets the AMIGA speech
  6137. ImpostaIlParlatoDellAmiga{}
  6138.  
  6139. ;loads note images for the basic event window
  6140. CaricaLeImmaginiDelleNote{}
  6141.  
  6142. ;creates the background bitmap
  6143. CreaLaBitmapPerLImmagineDiSfondo{}
  6144.  
  6145. ;sets the screen
  6146. ImpostaLoSchermo{}
  6147.  
  6148. ;loads the background pic into its bitmap
  6149. CaricaLImmagineDiSfondoNellaBitmap{}
  6150.  
  6151. ;loads the loaded projects history
  6152. CaricaLaStoriaDeiProgettiAperti{}
  6153.  
  6154. ;sets the main window
  6155. ImpostaLaFinestraPrincipale{}
  6156.  
  6157. ;puts the background pic into the main window
  6158. MettiLImmagineDiSfondoNellaFinestraPrincipale{}
  6159.  
  6160. ;shows the main window' sliders
  6161. MostraSliderFinestraPrincipale{}
  6162.  
  6163. ;--------------------------------------------------------------------------
  6164. ;copia in memoria lo sfondo della posizione a video dell'indicazione delle
  6165. ; battute per minuto
  6166. ;copies into memory the measures per minute indication's on screen position
  6167. ; background
  6168. ;------------
  6169.  CopiaLoSfondoSottoAlleBattutePerMinuto{}
  6170.  
  6171. ;------------------------------------------------------------------------------
  6172. ;copia in memoria lo sfondo della posizione a video dell'indicazione del tempo
  6173. ;copies into memory the time indication's on screen position background
  6174. ;-----------------------------------------------------------------------
  6175.  CopiaLoSfondoSottoAlTempo{}
  6176.  
  6177. ;shows the sequences
  6178. MostraLeSequenze{}
  6179.  
  6180. ;shows the execution velocity in bar per minute
  6181.  MostraLeBattutePerMinuto{BattutePerMinuto,0,#EseguiGliEventiMusicaliDallaFinestraPrincipale}
  6182.  
  6183. ;shows the metronomic time
  6184.  MostraIlTempo{(#MisureDiBase-1)*16+#BattitiDiBase-1,0,#EseguiGliEventiMusicaliDallaFinestraPrincipale}
  6185.  
  6186. If ParlatoAttivato=True Then Speak "Welcome to AmySequencer!"
  6187.  
  6188. ;activates MIDI
  6189. AttivaMIDI{}
  6190.  
  6191. ;-----------------
  6192. ;clclo principale
  6193. ;main loop
  6194. ;----------
  6195. Repeat
  6196.  
  6197.  If SecondoClicDelTopo.b=False
  6198.   MettiLImmagineDiSfondoNellaFinestraPrincipale{}
  6199.   MostraGliEventiMusicaliDisponibili{}
  6200.   MostraLeSequenze{}
  6201.   MostraLeBattutePerMinuto{BattutePerMinuto,0,#EseguiGliEventiMusicaliDallaFinestraPrincipale}
  6202.   MostraIlTempo{(Misure-1)*16+Battiti-1,0,#EseguiGliEventiMusicaliDallaFinestraPrincipale}
  6203.   MostraSliderFinestraPrincipale{}
  6204.   SecondoClicDelTopo=True
  6205.  EndIf
  6206.  
  6207.  If NoteSuonate>0
  6208.   If NoteSuonate=1 Then Messaggio$="There is a note" Else Messaggio$="There are "+Str$(NoteSuonate)+" notes"
  6209.   Messaggio$+" still playing:|clicking on OK you will stop "
  6210.   If NoteSuonate=1 Then Messaggio$+"this." Else Messaggio$+"these."
  6211.   EZRequest "AmySequencer message",Messaggio$,"OK"
  6212.   InterrompiTutteLeNote{#EseguiGliEventiMusicaliDallaFinestraPrincipale}
  6213.   NoteSuonate=0
  6214.  EndIf
  6215.  
  6216. ;--------------------------------------------------------------
  6217. ;questa variabile cattura gli eventi della finestra principale
  6218. ;this variable catch main window events
  6219. ;---------------------------------------
  6220.  EventoFinestraPrincipale.l=WaitEvent
  6221.  
  6222.  Select EventoFinestraPrincipale
  6223.  
  6224. ;------------------------------------
  6225. ;se avete premuto un tasto del mouse
  6226. ;if you have prssed a mouse button
  6227. ;----------------------------------
  6228.  Case #HaiPremutoUnTastoDelTopo
  6229.   XTopo=WMouseX:YTopo=WMouseY:TastoDelTopoCliccato.b=MButtons
  6230.   Select TastoDelTopoCliccato
  6231.   Case #TastoSinistroDelTopoPremuto
  6232.    If YTopo>=8 AND YTopo<8+TracceVisibili*8
  6233.     Sequenza=0
  6234.     TracciaSelezionata.w=YTopo/8+YTracceVisibili
  6235.     ResetList Sequenza()
  6236.     While NextItem(Sequenza())=True
  6237.      Sequenza+1
  6238.      TracciaSequenza.w=Sequenza()\Traccia
  6239.      InizioSequenza.l=Sequenza()\Inizio
  6240.      DurataSequenza=Sequenza()\Durata
  6241.      If DurataSequenza>0
  6242.       If TracciaSequenza=TracciaSelezionata
  6243.        FineSequenza.l=InizioSequenza+DurataSequenza-1
  6244.        I.w=InizioSequenza-XTracceVisibili
  6245.        F.w=FineSequenza-XTracceVisibili
  6246.        If XTopo>=I AND XTopo<=F
  6247.         SequenzaSelezionata=Sequenza
  6248.         Pop If:Pop If:Pop If:Pop While:Goto FineCicloWhileUno
  6249.        EndIf
  6250.       EndIf
  6251.      EndIf
  6252.     Wend
  6253.     LastItem Sequenza()
  6254.     If AddItem(Sequenza())=True
  6255.      Sequenza()\Traccia=TracciaSelezionata
  6256.      Sequenza()\Inizio=XTracceVisibili+XTopo-16
  6257.      Sequenza()\Durata=192*4.0/Misure*Battiti
  6258.     Else
  6259.      EZRequest "AmySequencer message","You have used all|the available sequences","OK"
  6260.     EndIf
  6261. FineCicloWhileUno
  6262.    EndIf
  6263.    If YTopo>AltezzaInternaFinestraPrincipale-1-8-8 AND YTopo<AltezzaInternaFinestraPrincipale-8
  6264.     If XTopo>LarghezzaInternaFinestraPrincipale-Len("Tempo=00/00")*8
  6265.      CambiaLaMisuraDelTempo{}
  6266.      MostraIlTempo{(Misure-1)*16+Battiti-1,0,#EseguiGliEventiMusicaliDallaFinestraPrincipale}
  6267.     EndIf
  6268.    EndIf
  6269.    SecondoClicDelTopo=False
  6270.   Case #TastoSinistroDelTopoRilasciato
  6271.    SecondoClicDelTopo=True
  6272.   End Select
  6273. ;---------------------------
  6274. ;se avete premuto un gadget
  6275. ;if you have pressed a gadget
  6276. ;-----------------------------
  6277. ; Case #HaiPremutoUnGadget
  6278. ;  Select GadgetHit
  6279. ;  Case 1
  6280. ;   LunghezzaSlider.w=LarghezzaInternaFinestraPrincipale
  6281. ;   BattutePerMinuto=10+ValoreSlider{1,300-9,LunghezzaSlider,"HORIZONTAL",#ListaGadgetPrincipale}
  6282. ;   TicPerCinquantesimoDiSecondo=BattutePerMinuto*192*4/3000
  6283. ;  Case 2
  6284. ;   AltezzaSlider.w=AltezzaSchermo-(AltezzaFonte+3)-8-8-8
  6285. ;   YTracceVisibili=ValoreSlider{2,#MassimoTracce-TracceVisibili,LunghezzaSlider,"VERTICAL",#ListaGadgetPrincipale}
  6286. ;  Case 3
  6287. ;   LunghezzaSlider=LarghezzaInternaFinestraPrincipale-16
  6288. ;   XTracceVisibili=ValoreSlider{3,AreaInvisibileDelMotivo,LunghezzaSlider,"HORIZONTAL",#ListaGadgetPrincipale}
  6289. ;  End Select
  6290. ;  SecondoClicDelTopo=False
  6291.  
  6292. ;------------------------------
  6293. ;se avete rilasciato un gadget
  6294. ;if you have released a gadget
  6295. ;------------------------------
  6296.  Case #HaiRilasciatoUnGadget
  6297.   Select GadgetHit
  6298.   Case 1
  6299.    LunghezzaSlider.w=LarghezzaInternaFinestraPrincipale
  6300.    BattutePerMinuto=10+ValoreSlider{1,300-9,LunghezzaSlider,"HORIZONTAL",#ListaGadgetPrincipale}
  6301.    TicPerCinquantesimoDiSecondo=BattutePerMinuto*192*4/3000
  6302.   Case 2
  6303.    AltezzaSlider.w=AltezzaSchermo-(AltezzaFonte+3)-8-8-8
  6304.    YTracceVisibili=ValoreSlider{2,#MassimoTracce-TracceVisibili,AltezzaSlider,"VERTICAL",#ListaGadgetPrincipale}
  6305.   Case 3
  6306.    LunghezzaSlider=LarghezzaInternaFinestraPrincipale-16
  6307.    XTracceVisibili=ValoreSlider{3,AreaInvisibileDelMotivo,LunghezzaSlider,"HORIZONTAL",#ListaGadgetPrincipale}
  6308.   End Select
  6309.   SecondoClicDelTopo=False
  6310.  
  6311. ;--------------------------------------
  6312. ;se avete attivato il menu' principale
  6313. ;if you have activated main menu
  6314. ;--------------------------------
  6315.  Case #HaiAttivatoIlMenu
  6316.   Select MenuHit
  6317.   Case 0
  6318.    If ItemHit=1
  6319.     CaricaUnProgetto{}
  6320.     ImpostaLaFinestraPrincipale{}
  6321.    EndIf
  6322.   Case 1
  6323.    Select ItemHit
  6324.    Case 0
  6325.     EseguiGliEventiMusicali{#EseguiGliEventiMusicaliDallaFinestraPrincipale}
  6326.     MostraLeBattutePerMinuto{BattutePerMinuto,0,#EseguiGliEventiMusicaliDallaFinestraPrincipale}
  6327.     MostraIlTempo{(Misure-1)*16+Battiti-1,0,#EseguiGliEventiMusicaliDallaFinestraPrincipale}
  6328.    Case 1
  6329.     RegistraGliEventiMusicali{#EseguiGliEventiMusicaliDallaFinestraPrincipale}
  6330.    End Select
  6331.   Case 2
  6332.    If SequenzaSelezionata>0
  6333.     Select ItemHit
  6334.     Case 0
  6335.      EditoreSequenza{}
  6336.     Case 1
  6337.      CambiaIlNomeDellaSequenzaSelezionata{}
  6338.     End Select
  6339.    Else
  6340.     EZRequest "AmySequencer message","You must select a sequence first","OK"
  6341.    EndIf
  6342.   Case 3
  6343.    If ItemHit=0 Then EditoreSuoni{}
  6344.   Case 4
  6345.    Select ItemHit
  6346.    Case 0
  6347.     AttivaMIDI{}
  6348.    Case 1
  6349.     ColoriOriginali=NOT ColoriOriginali
  6350.     CaricaLImmagineDiSfondoNellaBitmap{}
  6351.     CopiaLoSfondoSottoAlleBattutePerMinuto{}
  6352.     CopiaLoSfondoSottoAlTempo{}
  6353.    Case 2
  6354.     If Exists("ProjectsHistory")
  6355.      CancellaLaStoriaDeiProgettiAperti{}
  6356.      ImpostaLaFinestraPrincipale{}
  6357.     EndIf
  6358.    End Select
  6359.   End Select
  6360.  
  6361. ;-------------------------------------------------------------------
  6362. ;se avete scelto la voce Quit dal menu' Project attiva la variabile
  6363. ; EsciDalProgramma
  6364. ;if you have selected voice Quit from Project menu activates EsciDalProgramma
  6365. ; flag
  6366. ;------
  6367.   If MenuHit=0 AND ItemHit=VoceMenuEsci Then EsciDalProgramma=True
  6368.  
  6369.   SecondoClicDelTopo=False
  6370.  
  6371. ;--------------------------
  6372. ;se avete premuto un tasto
  6373. ;if you have pressed a key
  6374. ;--------------------------
  6375.  Case #HaiPremutoUnTasto
  6376.  
  6377. ;--------------------------------------------
  6378. ;questa variabile memorizza il tasto premuto
  6379. ;this variable store the key pressed
  6380. ;------------------------------------
  6381.   TastoPremuto$=Inkey$
  6382.  
  6383.   Select TastoPremuto$
  6384.  
  6385. ;-------------------------------------------------------------------
  6386. ;se avete premuto il tasto Esc attiva la variabile EsciDalProgramma
  6387. ;if you have typed Esc key activates EsciDalProgramma flag
  6388. ;----------------------------------------------------------
  6389.   Case TastoEsc$
  6390.    EsciDalProgramma=True
  6391.  
  6392.   Case TastoBackspace$
  6393.    If SequenzaSelezionata>0
  6394.     EliminaTuttiGliEventiMusicaliDellaSequenza{}
  6395.     TracciaVuota.w=Sequenza()\Traccia
  6396.     Sequenza()\Nome=""
  6397.     Sequenza()\Traccia=0
  6398.     Sequenza()\Inizio=0
  6399.     Sequenza()\Durata=0
  6400.     KillItem Sequenza()
  6401.     ResetList Sequenza()
  6402.     TracciaConSequenza.b=False
  6403.     While NextItem(Sequenza())
  6404.      If Sequenza()\Traccia=TracciaVuota
  6405.       TracciaConSequenza=True
  6406.       Pop While:Goto FineCicloWhileDue
  6407.      EndIf
  6408.     Wend
  6409. FineCicloWhileDue
  6410.     If TracciaConSequenza=False Then Traccia(TracciaVuota-1)=False
  6411.     SequenzaSelezionata=0
  6412.    Else
  6413.     EZRequest "AmySequencer message","You must select a sequence first","OK"
  6414.    EndIf
  6415.   Case TastoCursoreSu$
  6416.    If YTracceVisibili>0 Then YTracceVisibili-1
  6417.   Case TastoCursoreGiu$
  6418.    If YTracceVisibili<#MassimoTracce-TracceVisibili Then YTracceVisibili+1
  6419.   Case TastoCursoreDestra$
  6420.    If XTracceVisibili<AreaInvisibileDelMotivo
  6421.     XTracceVisibili+LarghezzaEventoBase
  6422.     XTracceVisibili=Min(XTracceVisibili,AreaInvisibileDelMotivo)
  6423.    EndIf
  6424.   Case TastoCursoreSinistra$
  6425.    If XTracceVisibili>0
  6426.     XTracceVisibili-LarghezzaEventoBase
  6427.     XTracceVisibili=Max(XTracceVisibili,0)
  6428.    EndIf
  6429.   End Select
  6430.   SecondoClicDelTopo=False
  6431.  
  6432.  End Select
  6433.  
  6434. ;----------------------------------------------------------------
  6435. ;ripete il ciclo se la variabile EsciDalProgramma e' disattivata
  6436. ;repeats loop if EsciDalProgramma flag is deactivated
  6437. ;-----------------------------------------------------
  6438. Until EsciDalProgramma=True
  6439.  
  6440. ;----------------------
  6441. ;fine del programma
  6442. ;program end
  6443. ;------------
  6444. End
  6445.